简介:大家好,我在第一个应用程序中痛苦地工作,无法在线找到这个“加载”问题的解决方案。
尝试做:(a)从表格视图(b)单击单元格(c)进入详细视图,其中从属性列表文件中填充文本视图字段。
问题:一切正常(导航栏标题更新,后退标题正确更改)但文本视图字段显示为空白(IB的默认状态)......首先。如果我单击后退按钮,然后返回到详细视图,则文本视图会正确加载并保持这种状态。完全莫名其妙。
CODE:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// check for view controller
if (self.savedScriptDetailVC ==nil) {
SavedScriptDetailVC *savedScriptDetail =[[SavedScriptDetailVC alloc]initWithNibName:@"SavedScriptDetailView" bundle:nil];
self.savedScriptDetailVC = savedScriptDetail;
[savedScriptDetail release];
}
// find row
NSInteger row = [indexPath row];
//get filepaths and set up arrays for pulling project names and text data
NSString *textPath = [self savedScriptsPath]; //using outside function to get path
NSArray *array = [self savedProjectNames]; //using outside function to pull project names
NSArray *textArray =[[NSArray alloc] initWithContentsOfFile:textPath];
textArray = [textArray valueForKey:@"ScriptText"];
//populate text for textview in detail view. Works, but have to drill down, back out before effect takes, why?-->
savedScriptDetailVC.fScriptText.text = [NSString stringWithFormat:@"%@", [textArray objectAtIndex:row]];
savedScriptDetailVC.title =[NSString stringWithFormat:@"%@", [array objectAtIndex:row]]; //change nav title
//change back button text
UIBarButtonItem *backButton =[[UIBarButtonItem alloc]initWithTitle:@"Scripts" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem =backButton;
[backButton release];
//using delegate to push views
ProjectAppDelegate *delegate =[[UIApplication sharedApplication]delegate];
[delegate.savedScriptsNavC pushViewController:savedScriptDetailVC animated:YES];
}
答案 0 :(得分:2)
视图控制器的实际视图(及其所有子视图)在需要之前不会加载,即访问view
属性。因此,在您首次尝试设置文本字段的值时,文本字段尚不存在,因为尚未创建视图控制器中的任何视图。如果你要检查,你会发现savedScriptDetailVC.fScriptText
是零。
一个简单的解决方法是在尝试操作这些子视图之前访问[savedScriptDetailVC view]
。
答案 1 :(得分:1)
我同意Anomie的解释:第一次尝试设置文本字段的文本时,文本字段为零,因此没有任何反应。不过,我建议使用不同的解决方案。为SavedScriptDetailVC提供一个或多个属性,您可以在其中存储执行其工作所需的任何信息,并在将控制器推入导航堆栈之前设置这些属性。让SavedScriptDetailVC负责正确配置它管理的视图,可能在其-viewWillAppear方法中。
通常,应该操纵视图控制器视图的唯一对象是视图控制器。如果你采用这种哲学,你将完全避免你现在遇到的那种问题。