0

カテゴリ -> サブカテゴリ -> 詳細ビューの 3 つのビューを持つ UIViewController があります。サブカテゴリと詳細ビューの内容は、カテゴリ ビューでクリックされた行によって異なります。これは「categoryClicked」というプロパティで行われ、sub-category.m ファイルで宣言されます。その値は、次のコード行によって category.m ファイルに指定されます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    Sub-category *sub = [[Sub-category alloc] initWithNibName:@"Sub-category" bundle:nil];

    sub.categoryClicked = [_categoryArray objectAtIndex:indexPath.row];
    [self.navigationController pushViewController:rubrieken animated:YES];

}

これは、詳細ビューで categoryClicked の値を使用するまでは問題なく機能します。category.m と DetailView.m サブカテゴリの両方で、.m がインポートされます。テスト目的で、詳細ビューにラベルを付け、DetailView.m ファイルに次のコードを記述しました。

Sub-category *sub = [[Sub-category alloc] initWithNibName:@"Sub-category" bundle:nil];

label.text = sub.categoryClicked;

このコードでうまくいくと確信していますが、実際には空のラベルが表示されます。私が間違っていることを教えてくれる人はいますか。

Edit
categoryClicked は、Sub-category.h で宣言され、Sub-category.m で合成されたプロパティです。もう少しコードを投稿したかったのですが、これ以上関連するコードはありません。

4

2 に答える 2

0

この行...

Sub-category *sub = [[Sub-category alloc] initWithNibName:@"Sub-category" bundle:nil];

...新しいを作成しますSub-categorySub-categoryそれは新しいので、他のオブジェクトにどのような情報が与えられたかについては何も知りません。データにアクセスする場合は、既存のオブジェクトへの参照を取得する必要があります。

于 2012-07-02T14:27:08.073 に答える
0

オブジェクトを作成するとalloc、そのオブジェクトにメモリ スペースが割り当てられます。init次に、 (like )で何かを使用すると、initWithNibNameそれが初期化されます。したがって、メモリ空間を割り当てsubて初期化すると、オブジェクトは 1 つになります。しかし、その後、まったく新しい (そしてまったく関係のない) オブジェクトが作成されますallocinit古いオブジェクトを破壊する可能性のあるものはすべて削除してください。

また、*シンボルはそれsubがポインタであることを意味します(メモリ位置を指します)。代入演算子 ( =) を使用するときはいつでも、新しいものを指すように指示しています。あなたがしていることは、指している対象を指し示すようにlabel.textポインターに指示することsubです。しかし、指している対象を変えsublabel.text同じものを指している場合、どちらもあなたが望む値を指していません。

これ以上のコードを投稿しようとせず、誰かが正確な変更を提案できる場合は、これが十分に明確であることを願っています。

-編集-

オブジェクトへの参照が必要な場合は、いくつかの方法でしか取得できません。知っておくべき重要なことは、既存のオブジェクトへの参照を実際に「作成」することはできないということです。オブジェクトに接続する必要があります。

  • 参照が必要なファイル内のオブジェクトを次のように宣言します。Category c = [[Category alloc] init];これは新しいオブジェクトを作成することを忘れないでください。既存のオブジェクトへの参照は作成されません。ただし、別のオブジェクトの内部でオブジェクトを作成するということは、一方が他方を「所有」し、そのオブジェクトで必要なことを何でもできることを意味します (明らかに、プロパティへのアクセスやメソッドの呼び出しを含みます)。
  • オブジェクトの「チェーン」を使用して、オブジェクトへの参照を取得します。したがって、ファイルが、必要なオブジェクトを所有するファイルを所有している場合は、topfile.otherfile.objectyouwant. これの最も明白な例は、サブビューが所有するオブジェクトへの参照を取得することです。

これは基本的なことです。名前だけで呼び出せる「グローバル」オブジェクトは存在しないことに注意してください。これで問題が解決しない場合は、サンプル コードを見て、参照がどのように機能するかを理解しようとするか、問題により密接に関連する別の質問を投稿してください。

于 2012-07-02T15:04:39.427 に答える