2013-07-18 128 views
0
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"(UserId==%@)",[defaluts objectForKey:@"objectId"]]; 
    PFQuery *frndquery=[PFQuery queryWithClassName:@"FriendsDetails" predicate:predicate]; 
    [frndquery orderByDescending:@"lastdate"]; 
    [frndquery whereKey:@"BlockStatus" equalTo:@"No"]; 
    NSArray *arrquery=[frndquery findObjects]; 
    for (PFObject *frndids in arr){ 
     PFRelation *relation=[frndids relationforKey:@"ChatRelation"]; 
     NSArray *arrids=[NSArray arrayWithObjects:[frndids objectForKey:@"UserId"],[frndids objectForKey:@"ConversationID"], nil]; 
     PFQuery *statusQuery = [relation query]; 
     [statusQuery orderByDescending:@"createdAt"]; 
     [statusQuery whereKey:@"Deletechat" notContainedIn:arrids]; 
     statusQuery.limit = [[NSNumber numberWithInt:1] intValue]; 
     NSArray *arrforrelationobjects=[statusQuery findObjects];} 

我想從第一個查詢本身檢索對象時想查找所有對象。請解決我的問題如何在獲取PFquery對象時獲取PFRelation對象?

+2

喜歡'請解決我的問題'。 :D – Peres

+0

問題是什麼? –

+0

在frndquery我得到pfrelation對象,而我從frnd查詢獲得的對象之後,我reterving從關係對象的數據,所以,現在我需要同時獲得pfquery * frndquery對象我需要的關係對象的細節我不dont想要編寫獲取pfrelation對象的代碼,我需要獲取所有細節(即由於這個我可以減少加載的細節和關係細節)。所以請幫助我 – Romance

回答

0

有一種方法可用於include指針值的屬性。您不能在關係中使用include方法。我所做的是使用雲代碼函數將我想要的結果聚合到JSON對象並返回該對象。

請參閱以下腳本中的fetchPostDetails函數。

https://github.com/brennanMKE/PostThings/blob/master/Parse/PostThings/cloud/main.js

它獲取項目有標籤的關係等對象,喜歡它碰巧是User對象它們關係到Post類。也有評論被引用作爲從每條評論回到帖子的指針。方法fetchPostTagsfetchPostLikes顯示如何獲取這些關係並填充持有所有結果的JSON對象。您需要部署這些Cloud Code更新,然後從iOS端作爲函數進行訪問。結果將以包含帖子,標籤,喜歡和評論的值的NSDictionary的形式返回。帖子是Post對象的數組。標籤,喜歡和評論是NSDictionary對象,它有postId作爲訪問Parse對象數組的關鍵。

這樣一個函數的調用會讓你想要你的需要。

我已經在下面的代碼中包含了一些代碼作爲參考,以防GitHub發生了什麼變化。

// Helper functions in PT namespace 
var PT = { 

    eachItem : function (items, callback) { 
     var index = 0; 
     var promise = new Parse.Promise(); 

     var continueWhile = function(nextItemFunction, asyncFunction) { 
      var item = nextItemFunction(); 
      if (item) { 
       asyncFunction(item).then(function() { 
        continueWhile(nextItemFunction, asyncFunction); 
       }); 
      } 
      else { 
       promise.resolve(); 
      } 
     }; 

     var nextItem = function() { 
      if (index < items.length) { 
       var item = items[index]; 
       index++; 
       return item; 
      } 
      else { 
       return null; 
      } 
     }; 

     continueWhile(nextItem, callback); 

     return promise; 
    }, 

    arrayContainsItem : function(array, item) { 
     // True if item is in array 
     var i = array.length; 
     while (i--) { 
      if (array[i] === item) { 
       return true; 
      } 
     } 
     return false; 
    }, 

    arrayContainsOtherArray : function(array, otherArray) { 
     /// True if each item in other array is in array 
     var i = otherArray.length; 
     while (i--) { 
      if (!PT.arrayContainsItem(array, otherArray[i])) { 
       return false; 
      } 
     } 
     return true; 
    }, 

    fetchPostTags : function(post) { 
     return post.relation("tags").query().find(); 
    }, 

    fetchPostLikes : function(post) { 
     return post.relation("likes").query().find(); 
    }, 

    fetchPostComments : function(post) { 
     var query = new Parse.Query(Comment); 
     query.include("owner"); 
     query.equalTo("post", post); 
     return query.find(); 
    }, 

    fetchPostDetails : function(post, json) { 
     json.tags[post.id] = []; 
     json.likes[post.id] = []; 
     json.comments[post.id] = []; 

     return PT.fetchPostTags(post).then(function(tags) { 
      json.tags[post.id] = tags; 
      return PT.fetchPostLikes(post); 
     }).then(function(likes) { 
      json.likes[post.id] = likes; 
      return PT.fetchPostComments(post); 
     }).then(function(comments) { 
      json.comments[post.id] = comments; 
      json.count++; 
      return Parse.Promise.as(); 
     }); 
    }, 

};