我从网址请求动态json字符串。
-(void)getDataFromServer{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.domain.com/json/"]];
[request setHTTPMethod:@"GET"];
[request addValue:@"getValues" forHTTPHeaderField:@"METHOD"];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
-(void)requestReturnedData:(NSData *)data{ //activated when data is returned
NSDictionary *dictionary = [NSDictionary dictionaryWithJSONData:data];
}
我得到了以下错误。
Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)(JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x977a900 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
我已经使用json文本文件
进行了测试NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.domain.com/jsonfile.json"]];
完美无缺。我怎样才能克服这个问题。
编辑---
我发现,如果json中的行数超过200,则会发生此错误。否则它运行得很好。是否存在数据大小问题。
答案 0 :(得分:3)
我遇到了同样的问题,并为我的代码找到了解决方案。当连接返回大数据方法" didReceiveData"收到大量数据后会拨打很多时间。我们必须将此方法的数据附加到解析器类的.h文件中声明的NSData引用。并且应该调用方法" dictionaryWithJSONData"在NSURLConnection" connectionDidFinishLoading"的委托方法中。
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.dataJSON appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSDictionary *dictionary = [NSDictionary dictionaryWithJSONData:dataJSON];
}
这里dataJSON在.h文件中声明并在init方法中分配。