使用我的JSON数据的RestKit无效

时间:2014-01-26 04:33:07

标签: mysql ios json restkit

我正在尝试了解restkit 0.22。我从不同的博客和youtubes获得了一些教程。我最终得到了混合代码。

任何人都可以帮助我,我真的需要它来为我的项目工作。

我使用实体Songs.xcdatamodeld

创建了核心数据模型

我有一个来自mySQL db的json:

[{"SongID":"1","SongTitle":"Song1","PerformerName":"Performer1","SongURL":"http://mysite/mysongs/1.mp3","PerformerPic":"PerfPic1.png"},
{"SongID":"2","SongTitle":"Song2","PerformerName":"Performer2","SongURL":"http://mysite/mysongs/2.mp3","PerformerPic":"PerfPic2.png"},
{"SongID":"3","SongTitle":"Song3","PerformerName":"Performer3","SongURL":"http://mysite/mysongs/3.mp3","PerformerPic":"PerfPic3.png"}]
AppDelegate.m中的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
       RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:http://mysite]];
    NSURL *modelURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Songs" ofType:@"momd"]];

    //Initialize managed object store
    NSManagedObjectModel *managedObjectModel = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL ] mutableCopy];
    RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];

    objectManager.managedObjectStore = managedObjectStore;
    [RKObjectManager sharedManager].requestSerializationMIMEType = RKMIMETypeJSON;
    [RKMIMETypeSerialization registeredMIMETypes];
    [objectManager setAcceptHeaderWithMIMEType:@"application/json"];

    RKEntityMapping* mapping = [RKEntityMapping mappingForEntityForName:@"Songs"
                                                   inManagedObjectStore:[RKObjectManager sharedManager].managedObjectStore];

    mapping.identificationAttributes = @[@"songID"];

    [mapping addAttributeMappingsFromDictionary:@{@"id" :   @"SongID",
                                                  @"songTitle"  :   @"SongTitle",
                                                  @"performerName"  :   @"PerformerName",
                                                  @"songURL"   :   @"SongURL",
                                                  @"performerPic"   :   @"PerformerPic"}];


    return YES;
}
TableView Controller中的

- (void)viewDidLoad
{
    [super viewDidLoad];

        [RKObjectManager.sharedManager getObjectsAtPath:@"/api.php"
                                         parameters:nil
                                            success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
     {
         self.Songs = [mappingResult array];

         NSLog(@"It Worked: %@", self.Songs);

     } failure:^(RKObjectRequestOperation *operation, NSError *error) {
         NSLog(@"It Failed: %@", error);
     }];

}

这是我得到的错误:

GET 'http://mysite/api.php' (200 OK / 0 objects) [request=3.5566s mapping=0.0000s
 total=3.5627s]: Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 
"No response descriptors match the response loaded." UserInfo=0xb5920b0 
{NSErrorFailingURLStringKey=http://mysite/api.php, NSLocalizedFailureReason=A 200
response was loaded from the URL 'http://mysite/api.php', which failed to match all (0)
 response descriptors:, NSLocalizedDescription=No response descriptors match the response
 loaded., keyPath=null, NSErrorFailingURLKey=http://mysite/api.php, 
NSUnderlyingError=0xb5921b0 "No mappable object representations were found at the key
 paths searched."}

1 个答案:

答案 0 :(得分:1)

首先,您似乎没有在设置代码中创建托管对象上下文。修复“主要”问题后,这可能会导致您遇到问题:

您的主要问题在错误消息中已清楚描述:

  

未能匹配所有(0)响应描述符

即。您尚未创建任何response descriptors

The Object-mapping guide引导您完成映射和描述符创建过程(并包含更多详细信息以进行引导)。


从以下内容开始:

RKResponseDescriptor *rd = [RKResponseDescriptor responseDescriptorWithMapping:mapping pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

然后将映射添加到对象管理器。

(确保你在某处调用createManagedObjectContexts