2013-05-16 86 views
1

我有一個自定義NSObject類,做一些FTP工作(顯示,傳輸...)。iOS,UITableView中的延遲顯示與insertRowsAtIndexPaths:withRowAnimation:

此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; 

所以當downloadFiles:從FTP類的方法想在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立即顯示新行!

有什麼建議嗎?

回答

1

聽起來像FTPMessageReceived:正在後臺線程上調用。嘗試在主線程上調用它:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [[self delegate] FTPMessageReceived:@"dir created"]; 
}); 
+0

:)是的,它的工作原理。這很簡單,謝謝。 – nouatzi