我有一个基于Core Data的应用程序,我决定尝试使用Magical Record。 (基本上MR似乎做了我编写的帮助类的许多事情)
但是,它根据模型创建了数据库,但是当我尝试使用新插入的对象保存上下文时,它似乎成功,但数据库中没有创建任何内容。我已经逐步确保新对象处于即将保存的上下文中,我告诉它保存,没有创建错误,但没有数据。我认为这里有一些显而易见的东西。
- (void)saveContext:(NSManagedObjectContext*)context withMessage:(NSString*)messageString
{
NSError *error = nil;
NSString *message = messageString;
NSManagedObjectContext *managedObjectContext = nil;
if (!context) {
managedObjectContext = [NSManagedObjectContext defaultContext];
} else {
managedObjectContext = context;
}
if(!message) {
message = @"Data Saved";
}
if ([managedObjectContext hasChanges]) {
[managedObjectContext save:&error];
if (error) {
NSLog(@"Save Error: %@", [error localizedDescription]);
}
else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Save Successful!"
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}
}
有什么见解?正如我所提到的,我可以确认堆栈是否已设置(我在App Delegate的applicationDidFinishLoading方法中这样做,命名存储),并且相应的数据库存在于预期的位置,并带有相应的表。我可以确认在managedObjectContext的insertedObjects中存在预期的新插入对象,并且没有因保存而导致的错误。但是,保存后,数据不存在。 (显然也不是在managedObjectContext中)
提前致谢。
答案 0 :(得分:1)
我没有看到您实际保存实体的位置,或者在该代码中对实体进行更改。
另外值得注意的是,你在这段代码中做了太多的工作。你可能想做更多的事情:
- (void) saveMyEntity:(NSObject<NSManagedObject *>) yourEntity;
{
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){
yourEntity.message = @"something new";
} completion:^{
<UIAlert stuff here>
}];
}
MagicalRecord提供了一个易于使用的API,它隐藏了记住如何保存数据等的繁琐工作。阅读README文件可能会很好。
答案 1 :(得分:0)
好吧,我仍然不知道我的代码出了什么问题,但是没有使用NSManagedObjectContext的保存方法似乎有效。相反,我这样做了:
- (void)saveContextWithMessage:(NSString*)messageString
{
NSString *message = messageString;
if (!message) {
message = @"Data Saved";
}
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext* localContext){}
completion:^{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Save Successful!"
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}];
}
如上所述,我正在使用MR为我做的代码处理事务,因此我将其删除以使其更清晰。