1

我有一个自定义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立即显示新行!

有什么建议吗?

4

1 回答 1

1

听起来像是FTPMessageReceived:在后台线程上调用的。尝试在主线程上调用它:

dispatch_async(dispatch_get_main_queue(), ^{
    [[self delegate] FTPMessageReceived:@"dir created"];
});
于 2013-05-16T18:47:07.647 回答