У меня есть контроллеры представления A (FileListViewController) и B (TextFileViewController). A является UITableViewController. Что я делаю сейчас, так это то, что после выбора строки в контроллере A я загружаю текстовый файл и отображаю этот текст в UITextView в контроллере B.
Ниже приведены заголовок и часть реализации (часть кода сокращена) моих двух контроллеров.
Интерфейс FileListViewcontroller:
@interface FileListViewController : UITableViewController {
NSMutableArray * fileList;
DBRestClient* restClient;
TextFileViewController *tfvc;
}
@property (nonatomic, retain) NSMutableArray * fileList;
@property (nonatomic, retain) TextFileViewController *tfvc;
@end
FileListViewController Реализация:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
DBMetadata *metaData = [fileList objectAtIndex:indexPath.row];
if(!metaData.isDirectory){
if([Utils isTextFile:metaData.path]){
if(!tfvc){
tfvc = [[TextFileViewController alloc] init];
}
[self restClient].delegate = self;
[[self restClient] loadFile:metaData.path intoPath:filePath];
[self.navigationController pushViewController:tfvc animated:YES];
}
}
- (void)restClient:(DBRestClient*)client loadedFile:(NSString*)destPath {
NSError *err = nil;
NSString *fileContent = [NSString stringWithContentsOfFile:destPath encoding:NSUTF8StringEncoding error:&err];
if(fileContent) {
[tfvc updateText:fileContent];
} else {
NSLog(@"Error reading %@: %@", destPath, err);
}
}
А вот интерфейс для TextFileViewController:
@interface TextFileViewController : UIViewController {
UITextView * textFileView;
}
@property (nonatomic, retain) IBOutlet UITextView * textFileView;
-(void) updateText:(NSString *) newString;
@end
Реализация TextFileViewController:
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)] autorelease];
textFileView = [[UITextView alloc] init];
}
- (void) updateText:(NSString *)newString {
NSLog(@"new string has value? %@", newString);
[textFileView setText:[NSString stringWithString:newString]];
NSLog(@"print upddated text of textview: %@", textFileView.text);
[[self textFileView] setNeedsDisplay];
}
(void) restClient :loadedFile: будет вызван после завершения loadFile: intoPath: в методе disSelectRowAtIndexPath.
В методе updateText TextFileViewController из NSLog я вижу, что свойство text обновлено правильно. Но экран не обновляется соответственно. Я пробовал setNeedsDisplay, но тщетно. Я что-то пропустил?
Заранее спасибо.