2012-01-14 20 views
1

我對iOS開發相對較新,並試圖熟悉RestKit,因此請耐心等待我丟失了明顯的東西。獲取Restkit教程代碼工作

我們正在開發一個iOS 5應用程序,它將接收JSON並將其映射到對象(如果它很重要,則啓用ARC)。在尋找Restkit的教程時,我碰到了this one。但是,示例代碼有(一節中的「與RKClient現實生活中的例子」)的簡化版本失敗,出現以下錯誤:

2012-01-14 22:15:55.124 Test_StaticLibInApp[789:707] *** Assertion failure in -[RKRequestQueue removeRequest:decrementCounter:], /Users/m/Documents/devel/ios/RestKit/Code/Network/RKRequestQueue.m:350 
2012-01-14 22:15:55.129 Test_StaticLibInApp[789:707] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempted to decrement loading count below zero' 

確切的說,這裏是我曾嘗試代碼:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    RKClient *client = [RKClient clientWithBaseURL:@"some_url"]; 
    RKLogConfigureByName("RestKit/Network", RKLogLevelTrace); 

    NSDictionary *queryParameters = [NSDictionary dictionaryWithObjectsAndKeys:nil]; 
    NSString *getResourcePath = RKPathAppendQueryParams(@"some_url_segment", queryParameters); 
    RKRequest *request = [client get:getResourcePath delegate:self]; 
    [request sendAsynchronously]; 
} 

- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response 
{ 
    id jsonParser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON]; 
    NSError *error = nil; 
    id parsedResponse = [jsonParser objectFromString:[response bodyAsString] error:&error]; 
    if (error == nil) 
    { 
     NSLog(@"GET returned with HTTP Code %d and parsedContent: %@", [response statusCode], parsedResponse); 
    } 
    else 
    { 
     NSLog(@"Error: %@", error); 
    } 
} 

- (void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error 
{ 
    NSLog(@"Failure of GET with error %@.", error); 
} 

這裏的跟蹤輸出:

2012-01-14 22:15:54.746 Test_StaticLibInApp[789:707] I restkit:RKLog.m:30 RestKit initialized... 
2012-01-14 22:15:54.765 Test_StaticLibInApp[789:707] D restkit.network:RKRequest.m:365 Sending asynchronous GET request to URL <url>. 
2012-01-14 22:15:54.771 Test_StaticLibInApp[789:707] T restkit.network:RKRequest.m:313 Prepared GET URLRequest '<NSMutableURLRequest url>'. HTTP Headers: { 
    "Content-Length" = 0; 
}. HTTP Body: . 
2012-01-14 22:15:54.852 Test_StaticLibInApp[789:707] I restkit.network.reachability:RKReachabilityObserver.m:369 Network availability has been determined for reachability observer <RKReachabilityObserver: 0x15c920 host=<server ip> isReachabilityDetermined=YES isMonitoringLocalWiFi=448340 reachabilityFlags=-R ------d> 
2012-01-14 22:15:54.857 Test_StaticLibInApp[789:707] D restkit.network:RKClient.m:388 Reachability to host '<server ip>' determined for client <RKClient: 0x158740>, unsuspending queue <RKRequestQueue: 0x15b260 name=(null) suspended=YES requestCount=1 loadingCount=0/5> 
2012-01-14 22:15:55.037 Test_StaticLibInApp[789:707] D restkit.network:RKResponse.m:189 NSHTTPURLResponse Status Code: 200 
2012-01-14 22:15:55.044 Test_StaticLibInApp[789:707] D restkit.network:RKResponse.m:190 Headers: { 
    "Content-Type" = "application/json"; 
    Date = "Sat, 14 Jan 2012 20:16:21 GMT"; 
    Server = "Apache-Coyote/1.1"; 
    "Transfer-Encoding" = Identity; 
} 
2012-01-14 22:15:55.048 Test_StaticLibInApp[789:707] T restkit.network:RKResponse.m:195 Read response body: <json text here> 
2012-01-14 22:15:55.059 Test_StaticLibInApp[789:707] I restkit.network:RKRequest.m:565 Status Code: 200 
2012-01-14 22:15:55.066 Test_StaticLibInApp[789:707] D restkit.network:RKRequest.m:566 Body: <json text here> 
2012-01-14 22:15:55.106 Test_StaticLibInApp[789:707] GET returned with HTTP Code 200 and parsedContent: <json text here> 
2012-01-14 22:15:55.124 Test_StaticLibInApp[789:707] *** Assertion failure in -[RKRequestQueue removeRequest:decrementCounter:], /Users/m/Documents/devel/ios/RestKit/Code/Network/RKRequestQueue.m:350 
2012-01-14 22:15:55.129 Test_StaticLibInApp[789:707] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempted to decrement loading count below zero' 
*** First throw call stack: 
(0x33fac8bf 0x341fc1e5 0x33fac7b9 0x3595b3b3 0x1da7f 0x1e7a3 0x3598150f 0x33f78577 0x33f040cf 0x358f53fb 0x1818b 0x2064b 0x359b8c39 0x359106e9 0x359106b3 0x359105d5 0x31fbe8a5 0x31fb3545 0x31fb3243 0x31fb3179 0x33f80b03 0x33f802cf 0x33f7f075 0x33f024dd 0x33f023a5 0x30786fcd 0x37383743 0x2c81 0x2c18) 

這是錯誤主題相關的應用與ARC編譯?對於Restkit安裝,我從git master分支獲得了文件,並按照安裝說明進行操作,而不更改其任何設置。

在此先感謝您的幫助。

回答

4

[請求sendAsynchronously]

[客戶得到:getResourcePath委託:自我]

已發送請求,並且遞減請求計數。你得到

原因:「試圖遞減零下裝載計數」

因爲這個原因。

0

RestKit不應該在啓用ARC的情況下編譯。 我所做的是編譯RestKit for Simulator和Device,然後添加結果.a幷包含在啓用ARC的項目中。 另外,您是否將-all_load -ObjC添加到其他鏈接器標誌?不需要 問候,

+1

我沒有編譯RestKit與ARC,只是應用程序。對於Restkit的安裝,我從git master分支獲得文件並按照[在此鏈接中]的安裝說明(https://github.com/RestKit/RestKit/wiki/Installing-RestKit-in-Xcode-4.x) ,不會更改任何設置。 – alokoko 2012-01-17 17:49:32

+0

看起來'[request sendAsynchronously]'行不需要。查看所選答案以獲取詳細信息。 – alokoko 2012-01-17 20:23:49

+0

哎呀是的,對不起,錯誤。 – 2012-01-18 16:25:18