0

大家好,当我尝试添加到空表视图时出现此错误:将第 0 行插入第 0 部分,但更新后第 0 部分中只有 0 行。有什么想法吗?

  dispatch_queue_t fetchQ = dispatch_queue_create("Blog Fetcher", NULL);
  dispatch_async(fetchQ, ^{
                      //pull this call out to Blog+twitter later saving should only take 
                      //place in the model!

                        [document.managedObjectContext performBlock:^
                        {
                            NSArray* resultsArray = [self.tweets objectForKey:@"results"]; 

                            for (NSDictionary* internalDict in resultsArray)
                            {

                            User *user = [NSEntityDescription 
                                                  insertNewObjectForEntityForName:@"User"inManagedObjectContext:self.context];
                                user.username =[internalDict objectForKey:@"from_user_name"];
                                [self.context save:nil];

                                self.list = [self.list arrayByAddingObject:user];
                                NSLog(@" indexpath set here %i",self.list.count-1);
                                NSIndexPath *newIndexpath =[NSIndexPath indexPathForRow:self.list.count-1  inSection:0];
                                [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexpath] withRowAnimation:UITableViewRowAnimationAutomatic];
                            }
                        }];

              });
            dispatch_release(fetchQ);

}
4

1 回答 1

0

我的第一个想法是您应该将更新发送到主线程。我不确定您的实现细节,但您可能还需要转到[self.context save:nil]主线程。

NSArray* resultsArray = [self.tweets objectForKey:@"results"];
NSMutableArray *users = [NSMutableArray arrayWithCapacity:resultsArray.count];
NSMutableArray *indexPaths =  [NSMutableArray arrayWithCapacity:resultsArray.count];
NSInteger row = self.list.count;

for (NSDictionary* internalDict in resultsArray)
{
    User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User"inManagedObjectContext:self.context];
    user.username =[internalDict objectForKey:@"from_user_name"];
    [self.context save:nil];

    [users addObject:user];

    NSLog(@" indexpath set here %i", row);
    NSIndexPath *newIndexpath =[NSIndexPath indexPathForRow:row inSection:0];
    row++;

    [indexPaths addObject:newIndexpath];
}

dispatch_async(dispatch_get_main_queue(), ^{
    self.list = [self.list arrayByAddingObjectsFromArray:users];
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexpath] withRowAnimation:UITableViewRowAnimationAutomatic];
};
于 2012-05-25T23:15:59.720 回答