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