Обновление CoreData не работает с использованием MagicalRecord

Я пытаюсь обновить существующую сущность CoreData, используя MagicalRecord (версия 2.3); это мой код:

PreferenceData *updateData = [PreferenceData MR_createEntityInContext:defaultContext];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"aHourFormat == %@ || aHourFormat == %@", [NSNumber numberWithInt: 12], [NSNumber numberWithInt: 24]];
updateData = [PreferenceData MR_findFirstWithPredicate: predicate inContext: defaultContext];

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *staffNamesArray = [[userDefaults arrayForKey:@"staffNamesArray"] mutableCopy];
NSMutableDictionary *preferencesDict = [[userDefaults dictionaryForKey:@"preferencesDictionary"] mutableCopy];

NSMutableArray *addlSvcsArray = [self createAddlSvcsTextboxArray];
NSMutableArray *customServicesArray = [[userDefaults arrayForKey:@"customServicesArray"] mutableCopy];

updateData.aStaffPos1 = staffNamesArray[0];
updateData.aStaffPos2 = staffNamesArray[1];
updateData.aStaffPos3 = staffNamesArray[2];
updateData.aStaffPos4 = staffNamesArray[3];
updateData.aStaffPos5 = staffNamesArray[4];
updateData.aStaffPos6 = staffNamesArray[5];

updateData.aShopOpens = [preferencesDict objectForKey:@"shopOpens"];
updateData.aShopCloses = [preferencesDict objectForKey:@"shopCloses"];

updateData.aDeleteOldAppts = [NSNumber numberWithInteger:[oDeleteAfterXDays.text intValue]];
updateData.aHourFormat = [NSNumber numberWithInt:[preferencesDict objectForKey:@"timeFormat"]];
updateData.aServicesType = [NSNumber numberWithInt:[preferencesDict objectForKey:@"servicesType"]];
updateData.aShowApptServices = [NSNumber numberWithInteger: @0];
updateData.aColorScheme = [preferencesDict objectForKey:@"colorScheme"];
updateData.aUpdatedRecordFlag = [NSNumber numberWithInteger: @1];

updateData.aAddlSvcs1 = addlSvcsArray[0];
updateData.aAddlSvcs2 = addlSvcsArray[1];
updateData.aAddlSvcs3 = addlSvcsArray[2];
updateData.aAddlSvcs4 = addlSvcsArray[3];
updateData.aAddlSvcs5 = addlSvcsArray[4];
updateData.aAddlSvcs6 = addlSvcsArray[5];

[defaultContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
    if(success)
        NSLog(@"update successful");
    else
        NSLog(@"update failed");
}];

}

Я не получаю ошибок; данные находятся в переменных, но когда я смотрю на запись, используя sqlitebrowser, ничего не изменилось.

Что я делаю неправильно?

1 ответ

Решение

Вы сначала создаете новую запись в updateData затем вы перезаписываете эту переменную результатом поиска. Каждый раз, когда вы запускаете обновление, вы создаете новую запись, которая будет иметь значения по умолчанию или будет пустой.

Если ваши данные не обновляются должным образом, updateData вы выбираете, скорее всего, nil потому что что-то не так с предикатом.

Другие вопросы по тегам