好的,这是我的问题。我正在通过REST-api同步服务器中的数据。返回的数据是JSON,我遍历它并根据数据采取适当的操作。也就是说,我将其存储为新对象,如果对象已经存在则更新该对象,如果仅存在于本地,则将其删除。
为了实现这一点,我在循环访问JSON时从返回的对象中收集ID。这给了我所有返回对象的索引。然后,我查询本地存储的数据,看它是否包含任何应删除的对象(换句话说,如果本地ID在JSON响应中是否存在)。
这是我的问题(对于一个有点冗长的序幕感到抱歉);我使用的NSPredicate仅适用于某些情况,哪些工作或失败似乎是随机的。
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
// Array which populates with the IDs from the server
NSMutableArray *arrayOfLogIDS = [[NSMutableArray alloc] init];
/*
Fetching and parsing JSON ... collecting IDs and adding them to the array. See example below;
*/
NSArray *logs = [[json valueForKey:@"Logs"] valueForKey:@"Object"];
// Looping through the logs array
for (NSArray *log in logs) {
[arrayOfLogIDS addObject:[log valueForKey:@"serverID"]];
}
// The NSPredicate
NSPredicate *serverIDS = [NSPredicate predicateWithFormat:@"NOT (serverID IN %@)", arrayOfLogIDS];
// The array which holds the objects that should be deleted
NSArray *logs = [Logs MR_findAllWithPredicate:serverIDS inContext:localContext];
}];
问题在于NSPredicate在这种特定情况下不会工作。即使我知道我在本地有应该删除的对象,它也不会返回任何结果。 我在应用程序的其他地方使用此方法,它按预期工作。如您所见,我在此应用程序中使用Magical Record进行核心数据管理。
我觉得我已经完全耗尽了下一步的事情,所以任何帮助都会非常感激! :)
答案 0 :(得分:0)
好的,事实证明,ID数组有时会将值存储为字符串,有时也会存储为整数。整数与NSPredicate运行良好,字符串不是很多:)解决了!谢谢大家的时间。