Magical Record 的新手:上下文未在数据存储中创建行
Posted
技术标签:
【中文标题】Magical Record 的新手:上下文未在数据存储中创建行【英文标题】:New to Magical Record: context not creating rows in datastore 【发布时间】:2012-10-08 22:41:36 【问题描述】:我有一个基于 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 中)
提前致谢。
【问题讨论】:
【参考方案1】:我看不到您实际保存实体的位置,或对该代码中的实体进行更改。
同样值得注意的是,您在该代码中做了太多工作。你可能想做更多类似的事情:
- (void) saveMyEntity:(NSObject<NSManagedObject *>) yourEntity;
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext)
yourEntity.message = @"something new";
completion:^
<UIAlert stuff here>
];
MagicalRecord 提供了一个易于使用的 API,它隐藏了很多乏味的记忆如何保存数据等。阅读 README 文件可能很好。
【讨论】:
嗯,这就是我的保存方法。我在创建和插入对象的另一个类中调用它。所以你说我不应该使用这个:[managedObjectContext save:&error];保存上下文?我已经阅读了我的阅读,但我没有看到它表明告诉上下文保存不会以通常的方式保存。正如我所说的,我显然遗漏了一些东西。【参考方案2】:好的,我仍然不知道我的代码出了什么问题,但不使用 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 为我做的代码做事,所以我删除了它以使其更清晰。
【讨论】:
以上是关于Magical Record 的新手:上下文未在数据存储中创建行的主要内容,如果未能解决你的问题,请参考以下文章
Magical Record IOS 目标 C. 我们应该创建啥上下文?
使用 Swift 3 在 Magical Record 中保存上下文时出错