首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用MagicalRecord插入数据

用MagicalRecord插入数据
EN

Stack Overflow用户
提问于 2015-04-30 09:40:16
回答 2查看 471关注 0票数 1

我将CoreDataMagicalRecord结合使用。

我想在下面的代码中插入Data

但是要插入数据就变成了一个带有消息Cocoa error 133000的错误。

AppDelegate.m

代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"class_schedule.sqlite"];

    return YES;
}

ViewController.m

代码语言:javascript
复制
- (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

代码语言:javascript
复制
@interface Data : NSManagedObject

@property (nonatomic, retain) NSNumber * id;
@property (nonatomic, retain) NSString * title;

@end

你能告诉我如何用魔法唱片插入唱片吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-30 12:36:25

错误:

  • Cocoa error 133000是:

NSManagedObjectReferentialIntegrityError = 133000,//试图触发指向不存在的对象的错误(我们可以看到存储,我们看不到对象)

  • (取自这是如此问题)。基本上,您使用的是不存在的NSManagedObject

插入数据:

  • 关于如何使用神奇记录插入数据,请看一看本教程,这可能会比我更好地解释它。

我的建议:

  • 直接使用核心数据。这是一个相当陡峭的学习曲线,但很快就会变得直观易用。如果你知道它是如何运作的,而不是依赖第三方的话,它也会对你有好处。
  • 如果您对它在更基本的层次上的工作方式感兴趣,请看一看SQLite。我不一定建议使用它,因为它是一个C库,但它将帮助您获得更深入的理解。
票数 0
EN

Stack Overflow用户

发布于 2016-06-09 22:34:20

当您尝试访问不存在的对象时,会得到错误133000。“但是嘿”,你可能会说,“你说不存在是什么意思?我正在创造它!”

当您像您所做的那样创建NSManagedObject时,也就是使用MR_createEntity,在它调用的引擎盖下面

代码语言:javascript
复制
NSManagedObject *newEntity = [self MR_createEntityInContext:[NSManagedObjectContext MR_contextForCurrentThread]]

这样做不会以任何方式保存此上下文,并且创建的实体也不会持久化。然后通过打电话

代码语言:javascript
复制
Data *localData = [data MR_inContext:localContext];

你实际上是在引擎盖下面做的:

代码语言:javascript
复制
BOOL success = [[self managedObjectContext] obtainPermanentIDsForObjects:@[self] error:&error];

问题是,如果NSManagedObject没有持久化,那么您将无法获得下一个在

代码语言:javascript
复制
NSManagedObject *inContext = [otherContext existingObjectWithID:[self objectID] error:&error];

上面的方法无法检索现有对象,因为它还不存在(请记住,创建实体所在的当前线程的上下文在任何时候都不会保存)。

但别担心,解决这个问题很简单。不要创造这样的新实体。相反,要这样做:

代码语言:javascript
复制
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
    Data *localData = [data MR_createEntityInContext:localContext];
    localData.title = textField.text;
} completion:^(BOOL success, NSError *error) {
}];

这样,就可以在要立即保存的上下文中创建实体并进行修改。这是在MagicalRecord中创建实体的正确方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29964230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档