Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Objective C中将两个单独的JSON数据对象合并为一个_Ios_Objective C_Json_Nsdata_Nsmutabledata - Fatal编程技术网

Ios 在Objective C中将两个单独的JSON数据对象合并为一个

Ios 在Objective C中将两个单独的JSON数据对象合并为一个,ios,objective-c,json,nsdata,nsmutabledata,Ios,Objective C,Json,Nsdata,Nsmutabledata,我试图得到2个单独的JSON数据对象,其中包含2个twitter用户提要,但我遇到了很多麻烦。我想同时处理它们并把它们放在一张桌子上,但我有困难 我有一个全局NSMutableData,它获取附加到它的每个JSON请求。一旦所有数据都放在一个地方,我就会尝试用全局NSMutableData更新表。allTheData是全局可更改对象 if ([twitterAccounts count] > 0) { while (accountsize != [twitterAccounts c

我试图得到2个单独的JSON数据对象,其中包含2个twitter用户提要,但我遇到了很多麻烦。我想同时处理它们并把它们放在一张桌子上,但我有困难

我有一个全局NSMutableData,它获取附加到它的每个JSON请求。一旦所有数据都放在一个地方,我就会尝试用全局NSMutableData更新表。allTheData是全局可更改对象

if ([twitterAccounts count] > 0) {
    while (accountsize != [twitterAccounts count]) {
      [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {

           [allTheData appendData:responseData];
      }];
      accountsize = accountsize + 1;
   }}

   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

      [self performSelectorOnMainThread:@selector(receiveData:) withObject:allTheData waitUntilDone:YES];
   });

- (void)receiveData:(NSData *)data {
  self.tweets = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
  [self.TwitterTableView reloadData];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   UITableViewCell *cell = [[UITableViewCell alloc] init];
   NSDictionary *tweet = [self.tweets objectAtIndex:indexPath.row];

   cell.textLabel.text = [tweet objectForKey:@"text"];


   return cell;
}
每当我运行这段代码时,它就会崩溃并抛出以下内容

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil'
*第一次抛出调用堆栈: (0x2622012 0x131ae7e 0x2621DB 0xe4f817 0x568c 0x132e6b0 0xd5b035 0x25a5f3f 0x25a596f 0x25c8734 0x25c7f44 0x25c7e1b 0x290d7e3 0x290d668 0x26265c 0x258d 0x24b5)
libc++abi.dylib:terminate调用引发异常,该异常来自Apple文档中有关
performRequestWithHandler的:

执行异步请求并在完成时调用指定的处理程序

这意味着您的请求处理程序将只被调用一次,并且不需要追加块。很可能是因为代码没有按预期的顺序执行而导致崩溃。我会尝试将对
receiveData
的调用移动到处理程序块中,以便仅当您实际拥有数据时才执行该调用:

            [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {

                dispatch_async(dispatch_get_main_queue,^{
                       [self receiveData:responseData];
                });

            }];
            accountsize = accountsize + 1;
        }
     }

这对我来说毫无意义:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
      [self performSelectorOnMainThread:@selector(receiveData:) withObject:allTheData waitUntilDone:YES];
   });
您正在主线程上调用一个方法,那么为什么要执行dispatch\u async呢您应该只在主队列上的
dispatch\u async
中包装对
reloadData
的调用。


同样,我会为每个tweet调用
JSONObjectWithData:options:error:
,然后将它们添加到数组中

我认为附加原始数据字节可能会破坏它。

您应该解析每个json对象并将它们附加到NSMutableArray。将NSMutableData对象与未解析的json连接起来似乎有着惊人的倒退。

请添加“receiveData”的代码,如果您的代码段包含在另一个块中,请添加相关代码。或者至少解释一下第5行的“}}”关闭了什么。