让 Restkit 教程代码正常工作

发布于 2024-12-27 04:33:11 字数 4761 浏览 0 评论 0 原文

我对 iOS 开发还比较陌生,并试图熟悉 RestKit,所以如果我遗漏了一些明显的东西,请耐心等待。

我们正在开发一个 iOS 5 应用程序,它将接收 JSON 并将其映射到对象(启用 ARC,如果重要的话)。在寻找 Restkit 教程时,我遇到了 这个。但是,那里的示例代码的简化版本(“使用 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 分支获取文件并按照安装说明进行操作,没有更改其任何设置。

预先感谢您的任何帮助。

I am relatively new to development on iOS and trying to get familiarized with RestKit, so bear with me if I am missing something obvious.

We are developing an iOS 5 application that will receive and map JSON to objects (ARC is enabled, if it matters). In search of a tutorial for Restkit, I came across this one. However, a simplified version of the sample code there (the one in the "A real life example with RKClient" section) fails with the following error:

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'

To be exact, here's the code I have tried:

- (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);
}

Here's the trace output:

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)

Is this error somehow related to the application being compiled with ARC? For Restkit installation, I got the files from the git master branch and followed the installation instructions, not changing any of its settings.

Thanks in advance for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

李白 2025-01-03 04:33:11

[request sendAsynchronously]

不需要

[client get:getResourcePath delegate:self]

已发送请求,并减少请求计数。 您会收到

原因:“尝试将加载计数减少到零以下”

因此,

the line

[request sendAsynchronously]

is not needed.

[client get:getResourcePath delegate:self]

already sends the request, and decrements the request count. you are getting

reason: 'Attempted to decrement loading count below zero'

because of this.

德意的啸 2025-01-03 04:33:11

RestKit 不应在启用 ARC 的情况下进行编译。
我所做的是为模拟器和设备编译 RestKit,然后添加生成的 .a 并包含在我启用 ARC 的项目中。
另外,您是否将 -all_load -ObjC 添加到其他链接器标志中?
问候,

RestKit should not be compiled with ARC enabled.
What I do is compile RestKit for Simulator and Device and then add the resulting .a and includes in my ARC enabled project.
Also, did you add -all_load -ObjC to Other Linker Flags?
Regards,

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文