我是第一次尝试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"。它被弃用了吗?
答案 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 ...