0

同様の質問をすべて読み、すべての提案を試しましたが、まだ何もありません。誰かが私の欠点を見つけてくれるかもしれません。

私のView Controllerは、2つのボタンのいずれかによって、別のView Controllerから開始されます。ボタン タップは NSNotification を (アタッチされた配列と共に) 送信し、このビュー コントローラーはこの通知を予期してから、このメソッドを呼び出します。

- (void)addContentToArray:(NSNotification *)aNotification {

    array = [NSArray arrayWithArray:[aNotification object]];

    ([array count] == 6) ? (category = YES) : (category = NO);

    [myTableView reloadData];
    NSLog(@"%d", [array count]);
    NSLog(@"%@", myTableView);
}

メソッドは毎回呼び出されます。配列数を変更することでわかります。ここで、通知オブジェクトは前のビュー コントローラーから渡された配列であり、これらのオブジェクトをローカル配列プロパティに割り当てます。これが私の UITableView ソースです。だから私がしていることは、 UITableView を再利用して、渡された配列の要素を表示しようとすることです。そして、最初に渡された配列 (最初に渡された方) に対してうまく機能します。

2 番目のボタンをタップすると、新しい配列が正常に渡されます (前述のように、異なる [配列カウント] のログから、異なる配列の 3 対 6 オブジェクトであることがわかります)。ただし、起こっていないのは、UITableView が更新されないことです (テーブル内の行を選択したときに渡された値は、間違った値が表示されていても、正しい配列からのものです)。

UITableView データ ソース メソッドは次のとおりです。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [array count];
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Identifier"];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Identifier"];
    }

    cell.textLabel.text = [[array objectAtIndex:indexPath.row] objectForKey:@"name"];

    if (category) {
        cell.detailTextLabel.text = [[array objectAtIndex:indexPath.row] objectForKey:@"description"];
    }

    return cell;
}

それで、私は何を間違っていますか?

役立つ可能性があるその他の考慮事項:

  • NSLog(@"%@", myTableView); (null) を返しますが、これは少し心配です。ここの myTableView は、ビュー コントローラーに正しく接続され、プロパティとして宣言され、合成された、私の nib ファイルからの UITableView です。
  • 問題のView ControllerはPKRevealControllerのrightViewControllerなので、繰り返し呼び出されるとviewWillAppearメソッドが呼び出されますが、viewDidLoadは呼び出されません(ただし、前述のとおり、addContentToArray:メソッドも毎回呼び出されています)
  • また、PKRevealController にある程度慣れている人のために、View Controller から focusdController をログに記録しようとすると、frontViewController (View Controller を表示するために移動するもの) がフォーカスされていると表示されます。それが myTableView が (null) である理由でしょうか?

洞察と助けに感謝します!

4

3 に答える 3

0

Myviewcontrollerのメソッドを作成して呼び出した部分のコードがさらに必要ですaddContentToArray。のオブジェクトにリリースコードを使用したと思いますMyviewcontroller。その部分を非表示にして一度試してみてください。

于 2013-06-23T06:26:20.607 に答える
0

initWithNibName メソッドを編集することで問題を解決できました(古い行はコメントアウトされています)

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

    //self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    self = [super initWithNibName:@"PurposeCategoryViewController" bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

どうやら、私のView Controller(PurposeCategoryViewControllerと呼ばれる)がPKRevealController階層のトップ/フォーカスされたView Controllerではなかったという事実と関係がありました。そのため、nib ファイルを具体的に示す必要がありました。

于 2013-06-23T10:08:55.300 に答える
0

What value are you returning in this delegate method: - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView make sure it is 1

于 2013-06-24T06:51:28.427 に答える