2014-01-26 36 views
0

我想了解restkit 0.22。我從不同的博客和youtubes一些教程。我結束了混合代碼。RestKit與我的JSON數據不工作

任何人都可以請幫助我,我真的需要它爲我的項目工作。

我創建核心數據模型與實體Songs.xcdatamodeld

我有一個來自於我的MySQL數據庫一個JSON:

在AppDelegate.m
[{"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"}] 

- (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中控制器

- (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)響應描述

iee您還沒有創建任何response descriptors

The Object-mapping guide引導您完成映射和描述符創建過程(並且包括更多的啓動細節)。


開始的東西,如:

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

然後添加映射對象管理。

(確保您在某處撥打createManagedObjectContexts)。

+0

謝謝@Wain的回答,請您向我解釋一下,在我的情況下,'回覆描述符'是什麼。 –