我有一个自定义NSObject
类,做一些FTP工作(显示,传输...)。
此FTP类具有downloadFiles:
方法,该方法在NSOperationQueue
内启动。
我希望这种方法能够在UITableView
中提供一些结果作为数据源。所以我决定将这些结果委托给UITableViewController
。
所以FTP类的协议:
@protocol FTPDelegate;
...
@interface FTP...
@property (nonatomic, weak) id <FTPDelegate> delegate;
...
@protocol FTPDelegate
-(void)FTPMessageReceived: (NSString *)message;
@end
然后我将自定义UITableViewController
声明为FTP类的委托:
self.myFTP = (FTP *) [self FTPManager];
self.myFTP.delegate = self;
因此,当FTP类的downloadFiles:方法想要在UITableView
中显示某些消息时,它会调用:
[[self delegate] FTPMessageReceived:@"dir created"];
UITableViewController
实现了该方法:
-(void)FTPMessageReceived: (NSString *)message {
NSUInteger index;
NSArray * indexArray;
[[self logLine] addObject: message]; // logLine is my data source
index = [[self logLine] count]-1;
NSLog(@"%u", index);
indexArray = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:index inSection:0]];
[[self logView] insertRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationRight];
}
插入有效,但新行大约需要5秒才会显示在UITableView
!!
当我在tableView:cellForRowAtIndexPath:
方法中放入一些日志时,会立即显示。
当我将FTPMessageReceived
代码放在一个按钮(例如)中时,UITableView
会立即显示新行!
有什么建议吗?
答案 0 :(得分:1)
听起来在后台线程上调用了FTPMessageReceived:
。尝试使用以下命令在主线程上调用它:
dispatch_async(dispatch_get_main_queue(), ^{
[[self delegate] FTPMessageReceived:@"dir created"];
});