2016-11-25 15 views
0

안녕에 액세스 할 수 없습니다.ParseLiveQuery 내가 ParseLiveQuery이 포인터 개체를 지원하지 생각 <p>ParseLiveQuery</p>를 통해 내 객체를 가져 오기 위해 노력하고있어 포인터 객체

여기 내 코드가 있습니다. Post.swift

import Foundation 
import Parse 

class Post: PFObject, PFSubclassing { 

    @NSManaged var postBy: PFUser? 
    @NSManaged var postText: String? 
    @NSManaged var postImg: PFFile? 


    static func parseClassName() -> String { 
     return "Post" 
    } 



    override class func query() -> PFQuery<PFObject>? { 
     //1 
     let query = PFQuery(className: Post.parseClassName()) 

     query.whereKeyExists("objectId") 
     //2 
     query.includeKeys(["postBy"]) 
     //3 
     query.order(byDescending: "createdAt") 
     return query 
    } 

} 

extension Post: FeedCellSupport { 

    var username:String?{ 

     return postBy?["username"] as? String 


    } 

    var userImg:PFFile?{ 

     return postBy?["profileImg"] as? PFFile 
    } 

FeedVC.swif

let liveQueryClient = ParseLiveQuery.Client() 

    protocol FeedCellSupport { 

     var username:String?{ get } 
     var userImg:PFFile?{ get } 


     var postText: String? { get } 

    } 


class FeedVC: UITableViewController, ShopDetailDelegate { 

    private var subscription: Subscription<Post>! 

    //Add friends and me 
    var postLiveQuery: PFQuery<Post> { 
     return (Post.query()? 
      .whereKeyExists("objectId") 
      .includeKeys(["postBy", "commentBy", "commentBy.commentBy"]) 
      .order(byAscending: "createdAt")) as! PFQuery<Post> 
    } 


    var results = [Post]() 


    override func viewDidLoad() { 
     super.viewDidLoad() 
subscription = liveQueryClient.subscribe(postLiveQuery).handleSubscribe { [weak self] (_) in 
      // Fetch the objects on subscription to not miss any 
      self?.fetchObjects() 
      }.handleEvent { [weak self] (_, event) in 
       self?.handleEvent(event: event) 
     } 

} 

나는 2 가지 질문이 있습니다.

1. ParseLiveQuery가 PFObject를 REST 결과와 같이 반환했습니다.

개체를 처음 가져올 때 올바르게 작동합니다.

나는 findObjectBackground를 통해 username과 userImg 데이터를 얻을 수 있음을 의미합니다.

<Post: 0x6180000b43a0, objectId: w5qcfMCByF, localId: (null)> { 
likeCount = 0; 
postBy = "<PFUser: 0x6180000f4600, objectId: rgG7XfAYWj, localId: (null)>"; 
postImg = "<PFFile: 0x618000246ba0>"; 
postText = nice2MeetYous121; 
sell = 0; 
} 

업데이트 된 이벤트를받은 후 .. 다른 스타일의 PFObject가 있습니다.

<Post: 0x6100000b3020, objectId: w5qcfMCByF, localId: (null)> { 
"__type" = Object; 
className = Post; 
createdAt = "2016-11-19T12:37:30.896Z"; 
likeCount = 0; 
postBy = { 
"__type" = Pointer; 
className = "_User"; 
objectId = rgG7XfAYWj; 
}; 
postImg = { 
"__type" = File; 
name = "92aa66bfdcf5f70d1d277556bbd9d7ca_post.jpg"; 
url = "https://parsefiles.back4app.com/PlY72cbRxsOIXQ1qbJjaQtudZQU9HA8U2RIg2oE1/92aa66bfdcf5f70d1d277556bbd9d7ca_post.jpg"; 
}; 
postText = nice2MeetYous1211; 
sell = 0; 
updatedAt = "2016-11-21T14:34:11.338Z"; 
} 

Parse LiveQuery가 REST와 같이 반환 되었기 때문에 오류 메시지가 표시됩니다.

2. "fix-object-decode"브랜치를 만들었을 때 REST 스타일이 아닌 PFObject를 반환했습니다. 그러나 또한 포인터 데이터를 직접 검색 할 수는 없습니다.

ios ParseLiveQuery link branch->fix-object-decode

내가 테스트를했다 "수정 - 객체 디코드"지점.

잘 형식화 된 PFObject를 반환했지만 다른 결과가 나타납니다. 내가

<Post: 0x6080000b0800, objectId: w5qcfMCByF, localId: (null)> { 
likeCount = 0; 
postBy = "<PFUser: 0x6080000e3100, objectId: rgG7XfAYWj, localId: (null)>"; 
postImg = "<PFFile: 0x60800024c150>"; 
postText = nice2MeetYous1211; 
sell = 0; 
} 

내가 postText을 변경

가 나는 라이브 쿼리하지만 다른 통해 업데이트 이벤트를 얻었다() findObjectInBackGround를 통해 요청하면

그것은 내 원래 PFObject입니다.

<Post: 0x6100000b1be0, objectId: w5qcfMCByF, localId: (null)> { 
likeCount = 0; 
postBy = "<PFUser: 0x6100000e6900, objectId: rgG7XfAYWj, localId: (null)>"; 
postImg = "<PFFile: 0x61000025d1f0>"; 
postText = nice2MeetYous; 
sell = 0; 
} 

는 당신이 see..PFUser 수 있듯이 : 0x6080000e3100 및 PFFile : 0x6100000e6900, PFFile : 0x60800024c150는 PFUser 변경되었습니다 내가 이벤트를 받았을 때

0x61000025d1f0 어쨌든 나는 fetchObject 수 없습니다.

실시간 쿼리 또는 구문 분석 서버 측 문제에 대해이 문제가 있습니까?

캐치되지 않는 예외로 인해 앱 종료 'NSInternalInconsistencyException', 이유 : 'Key "username"에 데이터가 없습니다. 그 값을 얻기 전에 fetchIfNeeded를 호출하십시오. '

fetchIfNeeded 오류가 발생하지 않도록 코드를 추가했습니다.

내 스 니펫 코드는 다음과 같습니다.

extension Post: FeedCellSupport { 

var username:String?{ 

    do { 
     try postBy?.fetchIfNeeded() 
    } catch _ { 
     print("There was an error") 
    } 


    return postBy?["username"] as? String 


} 

var userImg:PFFile?{ 
    do { 
     try postBy?.fetchIfNeeded() 
    } catch _ { 
     print("There was an error") 
    } 

    return postBy?["profileImg"] as? PFFile 
} 

지금은하지만 ... 시스템은 미세 말한다 작품 "경고 :. 장기 실행 작업이 주 스레드에서 실행중인"

을 나는 그것이 베스트 웨이 아니라고 생각 ..

누가 날 도와 줄 수 있니?

답변

0

구문 분석 서버가 ​​includekey를 지원하지 않는 것으로 나타났습니다.

+0

링크를 공유 하시겠습니까? – nathan

+0

내 의견을 업데이트하십시오. includeKey가 정상적으로 작동하고 있습니다. https://github.com/parse-community/ParseLiveQuery-iOS-OSX/issues/91 –

+0

예. https://github.com/parse-community/ParseLiveQuery-iOS-OSX/issues/30 및 https://github.com/parse-community/parse-server/issues/1686 – nathan