MagicalRecord 3.0不保存。没有第二次构建的对象

时间:2014-11-24 19:09:02

标签: ios xcode magicalrecord

我是第一次尝试MagicalRecord 3.0而且我无法使其正常工作。

这就是我在做的事情。

1-设置堆栈:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[MagicalRecord setupClassicStackWithSQLiteStoreNamed:@"Model"];}

我的型号名称为" Model.xcdatamodeld"。

2-创建实体并保存:

Preferences *p = [Preferences createEntity];
p.visibilityWindow = @"08:00-23:30";

[[NSManagedObjectContext MR_context] saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
    if (success) {
        NSLog(@"You successfully saved your context.");
    } else if (error) {
        NSLog(@"Error saving context: %@", error.description);
    }
}];

3-加载数据:

NSArray *matches;

NSError * error = nil;
matches = [Preferences MR_findAll];

Preferences *p = nil;

NSLog(@"Fetch request data %@",matches);
if(!matches || error || ([matches count] >1)){
    //handle error;
    NSLog(@"Error %@ matches count %lu", error, (unsigned long)[matches count]);
}else if ([matches count]){
    p = [matches firstObject];
    NSLog(@"Preferences found in coredata %@", p);
}else{
    NSLog(@"No matches %i", [matches count]);
}

我也是"清理"正如文件所示:

- (void)applicationWillTerminate:(UIApplication *)application {
[MagicalRecord cleanUp];

}

当我使用传统的核心数据框架时,它工作得很好。

它说我节省了成功。但是当我退出应用程序并尝试再次运行它时,它不再起作用了。 我做错了什么

另外,从我读过的帖子中,每个人都谈到了一个" MR_defaultContext"。它被弃用了吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

一些想法: 查看MagicalRecord 3.0的代码,MR_context返回NSPrivateQueueConcurrencyType。使用MR_createEntity似乎使用不同的主队列上下文。尝试使用MR_createEntityInContext:创建您的实体并传入MR_context

此外,如果您不知道何时调用这三种方法,请尝试使用MR_saveToPersistentStoreAndWaitWithError:

编辑: 可能最快的测试方法是改变第2步:

Preferences *p = [Preferences createEntity];
p.visibilityWindow = @"08:00-23:30";

NSError *error; // add this
BOOL success = [p.managedObjectContext MR_saveToPersistentStoreWithError:error] // change this
if (success) {
    NSLog(@"You successfully saved your context.");
} else if (error) {
    NSLog(@"Error saving context: %@", error.description);
}

答案 1 :(得分:0)

我遇到了同样的问题...我使用了(和你的东西一样)我也添加了用UIBackgroundTaskIdentifier存储的选项(opcional)

-

Preferences *p = [Preferences createEntity];
p.visibilityWindow = @"08:00-23:30";

[SomethingManagerObject saveIntoContext]

-

SomethingManagerObject

+ (void) saveWithContext{

//  THIS IS opcional!!! -> Prepar for BackgroundTask
UIApplication * application = [UIApplication sharedApplication];

__block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
    [application endBackgroundTask:bgTask];
    bgTask = UIBackgroundTaskInvalid;
}];

//  Get the context
NSManagedObjectContext *localContext = [[MagicalRecordStack defaultStack] context];

// Save the modification in the context
[localContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {

    [application endBackgroundTask:bgTask];
    bgTask = UIBackgroundTaskInvalid;

}];
}

或者您可以使用实体的managedObjectContext进行保存。在saveWithContext方法中,只需添加参数并发送p.managedObjectContext即可。内部变更[[MagicalRecordStack defaultStack] context]

SomethingManagerObject是一个NSObject,您可以使用它来拥有类似的类方法... save ... create ...