【问题标题】:SBJson and NSDataSBJson 和 NSData
【发布时间】:2011-07-15 21:13:10
【问题描述】:

我正在从 quizlet.com 获取数据,它适用于简单的代码:

-(void) grabbQuizletWithUrl:(NSURL*)requstURL {

     NSString *dataString = [NSString stringWithContentsOfURL:requestURL encoding:NSUTF8StringEncoding error:&error]; 

     NSDictionary *dict = [dataString JSONValue];
}

但我需要使用 NSURLConnection 来启动和停止活动指示器。我在努力

-(void) grabbQuizletWithUrl:(NSURL*)requstURL {

    NSURLRequest *quizletRequest = [[NSURLRequest alloc] initWithURL:requestURL];
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:quizletRequest
                                                          delegate:self];
    [connection release];
    [quizletRequest release];

}

// and getting data in delegate method:



- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

    [self.activityIndicator stopAnimating];

    NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    NSDictionary *dict = [dataString JSONValue];

}

我收到这样的消息:

[2377:707] -JSONValue 失败。错误是:输入意外结束

[2377:707] -JSONValue 失败。错误是:令牌的非法开始 [.]

[2377:707] -JSONValue 失败。错误是:令牌[d]的非法开始

【问题讨论】:

    标签: objective-c ios nsdata sbjson


    【解决方案1】:

    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; 中,您应该将收到的数据附加到先前存储的数据中,因为您只得到了响应的一部分,即:

    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
        // someNSMutableDataIVar is an ivar to store the data in
        [someNSMutableDataIVar appendData:data];
    }
    

    然后在另一个名为 :- (void)connectionDidFinishLoading:(NSURLConnection *)connection; 的委托方法中,您应该处理数据。

    -(void)connectionDidFinishLoading:(NSURLConnection *)connection {
        // the connection finished loading all data, process...
        [self.activityIndicator stopAnimating];
        NSString *dataString = [[NSString alloc] 
                                initWithData:someNSMutableDataIVar
                                    encoding:NSUTF8StringEncoding];
        NSDictionary *dict = [dataString JSONValue];
    }
    

    异步 ​​URL 加载系统在 Apple 的URL Loading System Programming Guide 中有详细描述。

    希望这会有所帮助!

    【讨论】:

    • 谢谢,我错过了!现在它起作用了。我没有了解 Apple 的指南,只是看了一眼。
    猜你喜欢
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    相关资源
    最近更新 更多