2013-03-06 5 views
1

На данный момент я не вижу никаких объектов AUser в моей базе данных приложений sqlite3.Сложность при создании объектов, управляемых основными данными

Это код, который я должен создать для пользователя. Я что-то упускаю? В коде нет предупреждений/ошибок.

AUser *user = [NSEntityDescription insertNewObjectForEntityForName:@"AUser" inManagedObjectContext:_managedObjectContext]; // _managedObjectContext is declared elsewhere 

user.name = username; //username is some string declared elsewhere/name is an attribute of AUser 

ответ

4

Вы должны выполнить экономить на контексте.

NSError* error = nil; 
if(![context save:&error]) {   
    // something went wrong 
    NSLog(@"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]); 
    abort(); 
} 

При выполнении сохранения, данные в контексте сохраняется координатор постоянного хранения (и, следовательно, в вашем SQL-магазине).

P.S. На основе обсуждения с @G. Shearer, в случае, если контекст не сэкономит, вы можете обработать ошибку изящно. Это означает, что вы не используете вызов abort(), который приводит к сбою приложения.

NSError* error = nil; 
if(![context save:&error]) {   
    // save failed, perform an action like alerting the user, etc. 
} else { 
    // save success 
} 
+0

О, хорошо! Как-то я, должно быть, пропустил часть сохранения при чтении через CoreData docs lol. Благодаря! – GangstaGraham

+0

@GangstaGraham приветствуется. –

+1

Вы не обязательно хотите, чтобы этот вызов прерывался(). возможно, иметь ошибку Core Data, которая не является видоизменением ваших приложений. Если возможно изящно поддерживать состояние приложения, вы должны. Вызов abort() в производственном коде просто приведет к сбою вашего приложения, что вызовет у пользователей сердитый характер. –

3

Необходимо создать резервную копию после создания объекта. Пример:

NSError *error; 
if ([user.managedObjectContext save:&error]) { 
    //Success! 
} else { 
    //Failure. Check error. 
} 
+0

О порядке! Как-то я, должно быть, пропустил часть сохранения при чтении через CoreData docs lol. Благодаря! – GangstaGraham

1

вам нужно позвонить

NSError *error = nil; 
[_managedObjectContext save:&error]; 
if(error != nil) NSLog(@"core data error: %@",[[error userInfo] description]); 

, прежде чем объект будет сохраняться в базе данных

+0

О, хорошо!Как-то я, должно быть, пропустил часть сохранения при чтении через CoreData docs lol. Благодаря! – GangstaGraham

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