Ios 神奇记录的新功能:上下文不在数据存储中创建行
我有一个基于核心数据的应用程序,我决定尝试使用Magic Record。(基本上MR似乎做了我编写的助手类所做的许多事情) 但是,它基于模型创建了数据库,但当我尝试使用新插入的对象保存上下文时,它似乎成功了,但数据库中没有创建任何内容。为了确保新对象位于即将保存的上下文中,我告诉它保存,没有创建错误,但是没有数据。我想我在这里遗漏了什么Ios 神奇记录的新功能:上下文不在数据存储中创建行,ios,core-data,magicalrecord,Ios,Core Data,Magicalrecord,我有一个基于核心数据的应用程序,我决定尝试使用Magic Record。(基本上MR似乎做了我编写的助手类所做的许多事情) 但是,它基于模型创建了数据库,但当我尝试使用新插入的对象保存上下文时,它似乎成功了,但数据库中没有创建任何内容。为了确保新对象位于即将保存的上下文中,我告诉它保存,没有创建错误,但是没有数据。我想我在这里遗漏了什么 - (void)saveContext:(NSManagedObjectContext*)context withMessage:(NSString*)mess
- (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的ApplicationIDFinishLoading方法中设置了堆栈,命名了存储),并且相应的数据库存在于预期位置,并具有相应的表。我可以确认managedObjectContext的insertedObjects中存在预期的新插入对象,并且保存不会导致任何错误。但是,保存后,数据不存在。(显然,在managedObjectContext中也是如此)
提前感谢。我看不出您实际上在哪里保存实体,或者在代码中对实体进行更改 同样值得注意的是,您在该代码中做了太多的工作。您可能想做一些更像:
- (void) saveMyEntity:(NSObject<NSManagedObject *>) yourEntity;
{
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){
yourEntity.message = @"something new";
} completion:^{
<UIAlert stuff here>
}];
}
-(void)saveMyEntity:(NSObject)您的实体;
{
[MagicalRecord saveWithBlock:^(NSManagedObjectContext*localContext){
yourEntity.message=@“新事物”;
}完成:^{
}];
}
MagicalRecord提供了一个易于使用的API,它隐藏了大量关于如何保存数据等的繁琐记忆。阅读自述文件可能是一件好事。好的,我仍然不知道我的代码出了什么问题,但不使用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为我编写的代码进行操作,因此我删除了该代码以使其更清晰。好的,这是我的保存方法。我在另一个类中调用它,在该类中创建并插入对象。因此,您是说我不应该使用此:[managedObjectContext save:&error];要保存上下文?我已经阅读了read me,但我不认为它表明告诉上下文保存不会以通常的方式保存。正如我所说,显然我遗漏了一些东西。