Iphone 为什么不是';这个街区不行吗?

Iphone 为什么不是';这个街区不行吗?,iphone,objective-c,cocoa-touch,uitableview,objective-c-blocks,Iphone,Objective C,Cocoa Touch,Uitableview,Objective C Blocks,我有这个块,但出于某种原因,UITableView没有重新加载。你知道为什么吗?我正在控制台中看到Save的NSLog -(void)addRoutine { PFObject *routine = [[PFObject alloc] initWithClassName:@"Routine"]; [routine setObject:self.entered forKey:@"name"]; [routine saveInBackgroundWithBlo

我有这个块,但出于某种原因,UITableView没有重新加载。你知道为什么吗?我正在控制台中看到Save的NSLog

-(void)addRoutine
{    
    PFObject *routine = [[PFObject alloc] initWithClassName:@"Routine"];
    [routine setObject:self.entered forKey:@"name"];    
    [routine saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (!error) {
            NSLog(@"Save!");
            [self.tableView reloadData];
        } else {
            // There was an error saving the rotuine.
        }
    }];   
}

啊,好的,现在我看到故障了。你不能在街区里使用self。因为自我是障碍。因此,您正在块上调用-tableView,它无法返回任何有用的内容。 您必须在块外部定义类似于
\u块id blockSelf=self
的内容,然后在块内部使用
[blockSelf tableView]
。在块内外执行
NSLog(@“%@”,self)
。你会发现它不是同一个物体

编辑:


这只是我在这里说的废话,显然不能解决问题。

PFObject如何调用块?它是在主线程上调用的吗?也许self.tableView返回零?可能会调用reloadData,但模型中没有任何更改?如果有帮助,我从API文档中添加了一个屏幕截图。我会重新问V1ru8的问题:
Maybe self.tableView返回nil?
No文档没有多大帮助。您可以使用[NSThread isMainThread]检查回调是否不是主线程。但self.tableView很可能为零,或者在重新加载时模型中没有任何更改。您是否检查了它是什么线程?(您还可以设置断点并查看它是什么线程)。你检查了tableView中的nil了吗?我在块内和块外都做了nslog,两次都得到了这个
Hmm,
nslog(@“@,[blockSelf tableView])
?我在块内做了,如果
nslog(@“@”,self)
两次都返回相同的结果,我的答案就错了。忘记blockSelf的东西吧。当调用
-reloadData
时,您是否会收到任何关于UITableViewDataSource方法的回调?