RestKit 在 RKEntityMapping 行崩溃

Posted

技术标签:

【中文标题】RestKit 在 RKEntityMapping 行崩溃【英文标题】:RestKit crashing at RKEntityMapping line 【发布时间】:2013-10-08 13:40:41 【问题描述】:

我是 Objective-C 的新手,非常坚持使用 RestKit。我正在尝试在我的网络服务器上使用来自 JSON 的数据创建一个非常简单的UITableView,但我已经卡了一段时间了。

这是我的简单 JSON:


    "restaurants": [
        
            "id": "27",
            "franchise_name": "Franchise 1",
            "branch_name": "Branch 1",
            "branch_phone": "0200 111 0000",
            "cuisine": "Salad",
            "cooking_time": "15",
            "is_open": 1
        ,
        
            "id": "97",
            "franchise_name": "Franchise 2",
            "branch_name": "Branch 2",
            "branch_phone": "0207 222 0000",
            "cuisine": "Healthy",
            "cooking_time": "10",
            "is_open": 1
        
    ]

这是我的核心数据模型:

    Entities: Restaurant
    Attributes: branchName -> String
    franchiseName -> String
    id -> integer 16
    readyTime-> integer 16

我的视图控制器中有以下代码。在viewDidLoadRKEntityMapping 导致异常:

RKManagedObjectStore *managedObjectStore = [RKManagedObjectStore defaultStore];

RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName:@"Restaurant" inManagedObjectStore:managedObjectStore]; //THIS LINE CAUSES THE CRASH

[entityMapping addAttributeMappingsFromDictionary:@
                                                    @"id":             @"id",
                                                    @"cooking_time":   @"readyTime",
                                                    @"branch_name":    @"branchName",
                                                    @"franchise_name": @"franchiseName"];

RKLogConfigureByName("RestKit/Network", RKLogLevelTrace);

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:entityMapping pathPattern:@"/api/restaurants" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; //I GET AN ISSUE HERE AS WELL INVOLVING responseDescriptorWithMapping BEING DEPRECIATED.

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http//mywebserver.com/api/resturants"]];

RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]];

managedObjectRequestOperation.managedObjectContext = self.managedObjectContext;

[[NSOperationQueue currentQueue] addOperation:managedObjectRequestOperation];

有几条我没有真正得到的错误消息:

    NSAssert(objectClass, @"Cannot initialize an entity mapping for an entity with a nil managed object class: Got nil class for managed object class name '%@'. Maybe you forgot to add the class files to your target?", [entity managedObjectClassName]);

在控制台中:

*** Assertion failure in -[RKEntityMapping initWithEntity:],

【问题讨论】:

【参考方案1】:

responseDescriptorWithMapping 已弃用,它现在有一个额外的 method 参数。这只是一个警告 - 您应该更新,但不是必须的。

如果在您第一次尝试使用managedObjectStore 时发生崩溃,则表明您没有正确/完全配置您的核心数据堆栈(或者您的实体名称/类名称错误)。检查this doc 以获得所需设置的简单概述。如果您想使用对象管理器,请查看this doc。

【讨论】:

感谢您的回答。你介意在第二部分给我更多细节吗?我是新手,我正在关注似乎不需要所有额外代码的 Gist 教程。 哪个教程(给个链接)。您至少需要创建托管对象存储和上下文。 这是来自 github wiki 的那个 这部分github.com/RestKit/RKGist/blob/master/… 显示了所需的设置。 这是我不明白的。我已经做到了(唯一的区别是我的 pathForResource 不同,我输入了我的 xcdatamodel 的文件名)。

以上是关于RestKit 在 RKEntityMapping 行崩溃的主要内容,如果未能解决你的问题,请参考以下文章

使用 RestKit 创建子对象

RestKit 强制 CoreData 保存

Restkit给出映射错误:

Restkit 元数据没有映射

没有存储在数据库中的 RestKit 对象映射

Restkit 0.20 嵌套对象数组映射问题