CoreData Edit / Overwrite Object - PullRequest
       12

CoreData Edit / Overwrite Object

16 голосов
/ 27 ноября 2010

Я играю с новым проектом, iPad-приложением с разделенным видом, использующим Базовые данные , и мне было интересно, так как достаточно ясно, как добавить и удалить элемент. Если бы я сказал изменить это для хранения текста, то этот текст должен отображаться в UITextView, как я могу редактировать или перезаписывать объект в CoreData ?

Таким образом, пользователь вводит свою заметку в UITextView, и когда он покидает ее, он редактирует и сохраняет заметку (объект в табличном представлении), которую он в настоящее время выбрал.

Спасибо за любую помощь.

Ответы [ 2 ]

33 голосов
/ 27 ноября 2010

Вы просто запрашиваете существующий объект, используя NSFetchRequest, изменяете все поля, которые необходимо обновить (все, что требуется, - простой установщик myObject.propertyName), а затем выполняете действие save для данных контекст.

РЕДАКТИРОВАТЬ , чтобы добавить пример кода. Я согласен с MCannon, о Core Data определенно стоит прочитать.

В этом коде предполагается, что вы создали проект с шаблоном, который включает в себя базовые данные, например, делегат вашего приложения имеет контекст управляемого объекта и т. Д. Обратите внимание, что здесь нет НИКАКОЙ проверки ошибок, это просто базовый код.

Загрузка объекта

// Retrieve the context
if (managedObjectContext == nil) {
    managedObjectContext = [(YourAppNameAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}

// Retrieve the entity from the local store -- much like a table in a database
NSEntityDescription *entity = [NSEntityDescription entityForName:@"YourEntityName" inManagedObjectContext:managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];

// Set the predicate -- much like a WHERE statement in a SQL database
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"YourIdentifyingObjectProperty == %@", yourIdentifyingQualifier];
[request setPredicate:predicate];

// Set the sorting -- mandatory, even if you're fetching a single record/object
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"yourIdentifyingQualifier" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release]; sortDescriptors = nil;
[sortDescriptor release]; sortDescriptor = nil;

// Request the data -- NOTE, this assumes only one match, that 
// yourIdentifyingQualifier is unique. It just grabs the first object in the array. 
YourEntityName *thisYourEntityName = [[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0];
[request release]; request = nil;

Обновление объекта

thisYourEntityName.ExampleNSStringAttributeName = @"The new value";
thisYourEntityName.ExampleNSDateAttributeName = [NSDate date];

Сохранить изменения

NSError *error;
[self.managedObjectContext save:&error];

Теперь ваш объект / строка обновлены.

4 голосов
/ 28 ноября 2010

http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdFetching.html покажет вам, как получить объект,

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdUsingMOs.html покажет вам, как изменить свойства и сохранить их.

Основные данные - это то, где вы действительно хотите прочитать большую часть документации Apple и ознакомиться с ней, это сэкономит вам часы в долгосрочной перспективе. надеюсь, это поможет!

...