Существует метод, который вы можете использовать для include
свойств, которые являются значениями указателя. Вы не можете использовать метод include
с отношениями. Вместо этого я использую функцию Cloud Code для объединения результатов, которые я хочу, в объект JSON и возвращаю этот объект.
См. функцию fetchPostDetails
в следующем скрипте.
https://github.com/brennanMKE/PostThings/blob/master/Parse/PostThings/cloud/main.js
Он извлекает элементы — это объекты отношений, такие как теги и лайки, которые являются User
объектами, которые являются отношениями к Post
классу. Есть также комментарии, на которые ссылаются в качестве указателя на пост из каждого комментария. Методы fetchPostTags
и fetchPostLikes
показывают, как получить эти отношения и заполнить объект JSON, который содержит все результаты. Вам необходимо развернуть это обновление облачного кода, а затем получить к нему доступ как к функции со стороны 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();
});
},
};
person
Brennan
schedule
15.12.2013
Please solve my problem
. :D - person Rui Peres   schedule 18.07.2013