将数据加载到文本视图字段中的奇怪问题

时间:2011-03-07 03:21:54

标签: iphone ios sdk

简介:大家好,我在第一个应用程序中痛苦地工作,无法在线找到这个“加载”问题的解决方案。

尝试做:(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];
}

2 个答案:

答案 0 :(得分:2)

视图控制器的实际视图(及其所有子视图)在需要之前不会加载,即访问view属性。因此,在您首次尝试设置文本字段的值时,文本字段尚不存在,因为尚未创建视图控制器中的任何视图。如果你要检查,你会发现savedScriptDetailVC.fScriptText是零。

一个简单的解决方法是在尝试操作这些子视图之前访问[savedScriptDetailVC view]

答案 1 :(得分:1)

我同意Anomie的解释:第一次尝试设置文本字段的文本时,文本字段为零,因此没有任何反应。不过,我建议使用不同的解决方案。为SavedScriptDetailVC提供一个或多个属性,您可以在其中存储执行其工作所需的任何信息,并在将控制器推入导航堆栈之前设置这些属性。让SavedScriptDetailVC负责正确配置它管理的视图,可能在其-viewWillAppear方法中。

通常,应该操纵视图控制器视图的唯一对象是视图控制器。如果你采用这种哲学,你将完全避免你现在遇到的那种问题。