0

我的主视图上有一个表格视图,我的详细视图上有一个文本字段。该应用程序很简单。添加包含一些信息的表格视图单元格。然后,如果您按下单元格,它会推动详细视图并在文本字段中显示单元格的title/ 。text在主视图中,我使用的是 NSFetchedResultsController。在第二个视图中,我试图加载数据,但由于某种原因,我没有正确使用我自己的 indexPath 变量,因为每个被按下的单元格都会显示text详细视图上的第一个单元格。代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // Set up the cell...
[self configureCell:cell atIndexPath:indexPath];
self.path = indexPath;
    //I have tried this as well.
    //self.path = [NSIndexPath indexPathForRow:indexPath.row inSection:0];
return cell;
}

详细视图:

-(void)viewWillAppear:(BOOL)animated
{
if (self.context == nil)

{

    self.context = [(FBCDAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

}

NSFetchRequest *request = [[NSFetchRequest alloc]init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"FailedBankInfo" inManagedObjectContext:self.context];

[request setEntity:entity];

NSError *error;

NSMutableArray *array = [[self.context executeFetchRequest:request error:&error] mutableCopy];

[self setTableArray:array];

FailedBankInfo *infoData = [self.tableArray objectAtIndex:self.root.path.row];

NSString *string = [NSString stringWithFormat:@"%@", infoData.name];

self.nameField.text = string;

string = [NSString stringWithFormat:@"%@", infoData.city];

self.cityField.text = string;

string = [NSString stringWithFormat:@"%@", infoData.state];

self.stateField.text = string;

[super viewWillAppear:YES];

}
4

1 回答 1

1

为什么不直接将索引路径传递给细节视图控制器

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

方法,带有自定义初始化程序:

- (id)initDetailViewControllerWithIndexPath:(NSIndexPath*)indexPath

?

我不熟悉 UIViewController 上的“根”属性,那是什么?这似乎是试图从详细视图控制器中引用第一个视图控制器。您是否检查过 self.root.path.row 返回的内容?

无论如何,您的第一个视图控制器的路径属性与您拥有代码的方式选择的单元格无关。它只是设置为加载的最后一个单元格的 indexPath。如果您确实想了解如何从详细视图控制器访问此属性,则必须在 didSelectRowAtIndexPath 方法中设置它,而不是在 cellForRowAtIndexPath 方法中设置才能准确。


我认为,如果您在 didSelectRowAtIndexPath 中设置路径,您的方式应该可行。但是要编写自定义初始化程序,请向您的详细视图控制器添加一个名为 path 的属性,然后将自定义初始化程序添加到详细视图控制器,如下所示:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil andIndexPath:(NSIndexPath*)indexPath
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.path = indexPath;
    }
    return self;
}

并使用第一个视图控制器的 didSelectRowAtIndexPath 方法调用它

DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:nil bundle:[NSBundle mainBundle] andIndexPath:indexPath];
[self presentViewController:detailViewController animated:YES completion:nil]; 

(如果您不是从 xib 初始化,请自定义您正在使用的初始化程序)。

或者,您可以传入一个 NSDictionary,其中包含您在详细视图控制器中需要的数据(标题和文本),而不是传入索引路径。

于 2012-12-09T19:52:31.147 回答