表视图插入错误

时间:2012-05-25 20:18:59

标签: objective-c uitableview ios5

大家好我在尝试添加到空表视图时出现此错误:将第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);

}

1 个答案:

答案 0 :(得分: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];
};