0

マスタービューにテーブルビューがあり、詳細ビューにtextFieldがあります。アプリはシンプルです。いくつかの情報を含むテーブルビューセルを追加します。次にセルを押すと、詳細ビ​​ューが押され、テキストフィールドにセルのtitle/が表示されます。textマスタービューで、NSFetchedResultsControllerを使用しています。2番目のビューでは、データを読み込もうとしていますが、押されたすべてのセルtextに詳細ビューの最初のセルが表示されるため、何らかの理由で自分のindexPath変数を正しく使用していません。コード:

- (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の「root」プロパティに精通していません。それは何ですか?詳細ビューコントローラから最初のビューコントローラを参照する試みのようです。self.root.path.rowが何を返しているかを確認しましたか?

とにかく、最初のView Controllerのパスプロパティは、コードの方法で選択されたセルとは無関係です。ロードされた最後のセルのindexPathに設定されるだけです。詳細ビューコントローラからこのプロパティにアクセスする方法が必要な場合は、cellForRowAtIndexPathメソッドではなく、didSelectRowAtIndexPathメソッドで設定する必要があります。


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

を使用して、最初のViewControllerの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 に答える