具有 "NOT IN" 条件的 NSPredicate 失败

NSPredicate with "NOT IN" condition fails

好的,这是我的问题。我正在通过 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 不适用于这种特定情况。它 returns 没有结果,即使我知道我在本地有应该删除的对象。 我在应用程序的其他地方使用了这种方法,它按预期工作。如您所见,我在此应用程序中使用 Magical Record 进行核心数据管理。

我觉得我完全 运行 没有下一步可以尝试的东西了,所以任何帮助将不胜感激! :)

好的,事实证明,ID 数组有时将值存储为字符串,有时存储为整数。整数与 NSPredicate 配合得很好,字符串则不太适用:) 已解决!感谢大家抽出宝贵时间。