2017-01-19 12 views
0

Хорошо, вот моя проблема. Я синхронизирую данные с сервера через REST-api. Возвращенные данные находятся в JSON, я прохожу через него и принимает соответствующие действия в зависимости от данных. То есть я либо храню его как новый объект, либо обновляет объект, если он уже существует, либо удаляет его, если он существует только локально.NSPredicate с условием «NOT IN» не работает

Для этого я собираю идентификаторы из возвращаемых объектов, когда я прохожу через JSON. Это дает мне индекс всех возвращаемых объектов. Затем я запрашиваю локально сохраненные данные, чтобы увидеть, содержит ли он какие-либо объекты, которые необходимо удалить (другими словами, если локальный идентификатор существует или нет в ответе 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

Можете ли вы рассказать мне, где вы заполняете данные в массив 'arrayOfLogIDS'? – CodeChanger

+0

Я отредактировал вопрос, спасибо, что посмотрел на него! :) – cmeriksson

+0

Ваше использование NOT IN выглядит правильно. Может быть, проблема в другом месте. – danh

ответ

0

Хорошо, как оказалось, массив идентификаторов иногда имел значения, хранящиеся в виде строки, а иногда и целые. Целые работали хорошо с NSPredicate, струны не так много :) Решено! Спасибо всем за ваше время.

 Смежные вопросы

  • Нет связанных вопросов^_^