Что делать, если executeFetchRequest возвращает 1 элемент типа: NSKnownKeysDictionary1 вместо manageObjectContext

У меня есть рабочий код, который получает веб-сервис обновлений, принимает решение об обновлении или создает новый, но обновление не работает. (Здесь я прочитал десятки других вопросов, в том числе один здесь это то, за чем я следую.Другим примером является принятый ответ здесь< /а>)

SaveContext: ниже выполняется без ошибок и без запроса (с использованием уровня отладки 2)

Возвращенный массив с 19 в качестве желаемой записи. От 1_:

<_PFArray 0xa349280>(
{
    address = "an address";
    companyName = "the Name";
    email = "[email protected]";
    fname = "first name";
    inserted = "2014-05-01 04:00:00 +0000";
    level = 3;
    lname = "last name";
    num = 19;
    phone = "phone #";
    tax2 = "tax number";
}

Обобщить:

  1. В saveContext не выполняется запрос к Core Data
  2. Никакие ошибки не выдаются в отладчике или saveContext
  3. Изменения НЕ сохраняются в Core Data
  4. Массив results представляет собой _PFArray
  5. Я думаю, что проблема связана с объектом existingObject. Это неправильная ссылка на manageObjectContext.

Что мне нужно, чтобы saveContext сохранил данные?

** РЕДАКТИРОВАТЬ: ** Я сузил это до того, что existObject НЕ является правильным типом, но я все еще ищу причину, по которой это не managedObjectContext.

Вот метод извлечения. Возможно, проблема здесь:

- (NSArray *)performFetchInEntity:(NSString *)entity withPredicate:(NSString *)predicate {
    NSManagedObjectContext *context = self.managedObjectContext;

    // Create the fetch request
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    [fetchRequest setEntity: [NSEntityDescription entityForName:entity
                                         inManagedObjectContext:context]];

    // This next line should NOT be used !!!
    // [fetchRequest setResultType:NSDictionaryResultType];
    [fetchRequest setReturnsObjectsAsFaults:NO];
    if (predicate)
        [fetchRequest setPredicate:[NSPredicate predicateWithFormat:predicate]];

    // Execute the fetch.
    NSError *error;
    NSArray *result = [context executeFetchRequest:fetchRequest
                                             error:&error];

    NSLog(@"returned: %@", [result objectAtIndex:0]);
    if (!error)
        return result;
    else
        return nil;
}

person David    schedule 20.05.2014    source источник
comment
Вы убедились, что по крайней мере некоторые значения объекта изменились и должны быть обновлены, как я полагаю?   -  person Tom Harrington    schedule 21.05.2014
comment
@ Том Харрингтон Да. Эта часть проекта началась с вашего «Сохранения JSON в основные данные» на cimg. Чтобы пояснить, я адаптировал ваш код, потому что у меня могут быть обновления для 5 объектов, поступающих в json.   -  person David    schedule 21.05.2014
comment
@TomHarrington В данный момент проверка печатает массив результатов (один элемент) и видит, как значение и ключ existsObject проходят с желаемыми изменениями. При этом никаких изменений не происходит.   -  person David    schedule 21.05.2014


Ответы (2)


Виновника нашли:

[fetchRequest setResultType:NSDictionaryResultType];

Удаление этой строки привело к правильному возврату типа в результирующем массиве.

person David    schedule 21.05.2014

Я столкнулся с той же проблемой.

Я получал сообщение об ошибке: NSKnownKeysDictionary1 неизвестный объект.

Я пытался получить массив объектов из основных данных и написал строку кода в методе:

[request setSortDescriptors:[NSArray arrayWithObject:sortByName]];
sortByName =nil;
[request setResultType:NSDictionaryResultType];

Затем я пытался получить объект из массива, используя быстрое перечисление. Выдавало ошибку. NSKnownKeysDictionary1 неизвестный объект. я удалил

[request setResultType:NSDictionaryResultType];

Код сработал.

person Anil Gupta    schedule 01.02.2017