我将CoreData与MagicalRecord结合使用。
我想在下面的代码中插入Data,
但是要插入数据就变成了一个带有消息Cocoa error 133000的错误。
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"class_schedule.sqlite"];
return YES;
}ViewController.m
- (void)saveData
{
Data *data = [Data MR_createEntity];
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
Data *localData = [data MR_inContext:localContext];
localData.title = textField.text;
} completion:^(BOOL success, NSError *error) {
}];
}Data.h
@interface Data : NSManagedObject
@property (nonatomic, retain) NSNumber * id;
@property (nonatomic, retain) NSString * title;
@end你能告诉我如何用魔法唱片插入唱片吗?
发布于 2015-04-30 12:36:25
错误:
Cocoa error 133000是:NSManagedObjectReferentialIntegrityError = 133000,//试图触发指向不存在的对象的错误(我们可以看到存储,我们看不到对象)
NSManagedObject。插入数据:
我的建议:
发布于 2016-06-09 22:34:20
当您尝试访问不存在的对象时,会得到错误133000。“但是嘿”,你可能会说,“你说不存在是什么意思?我正在创造它!”
当您像您所做的那样创建NSManagedObject时,也就是使用MR_createEntity,在它调用的引擎盖下面
NSManagedObject *newEntity = [self MR_createEntityInContext:[NSManagedObjectContext MR_contextForCurrentThread]]这样做不会以任何方式保存此上下文,并且创建的实体也不会持久化。然后通过打电话
Data *localData = [data MR_inContext:localContext];你实际上是在引擎盖下面做的:
BOOL success = [[self managedObjectContext] obtainPermanentIDsForObjects:@[self] error:&error];问题是,如果NSManagedObject没有持久化,那么您将无法获得下一个在
NSManagedObject *inContext = [otherContext existingObjectWithID:[self objectID] error:&error];上面的方法无法检索现有对象,因为它还不存在(请记住,创建实体所在的当前线程的上下文在任何时候都不会保存)。
但别担心,解决这个问题很简单。不要创造这样的新实体。相反,要这样做:
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
Data *localData = [data MR_createEntityInContext:localContext];
localData.title = textField.text;
} completion:^(BOOL success, NSError *error) {
}];这样,就可以在要立即保存的上下文中创建实体并进行修改。这是在MagicalRecord中创建实体的正确方法。
https://stackoverflow.com/questions/29964230
复制相似问题