0

設定:

MainViewControllerオブジェクトの を保持しNSMutableArrayます。オブジェクトは、 aとivarNewContactを持つmy のインスタンスです。をタップすると、すべてのオブジェクト ivar (および) がテーブルに表示されます。firstNamecontactImageshowAllContactsBtnMainViewController AllContactsViewControllerfirstNamescontactImages

AllContactsViewController問題は、データを適切に渡さないが、修正方法がわからないことだと思います。言及する価値があるのは、 NSLogステートメントが表示されcellForRowAtIndexないため、メソッドがまったく呼び出されない可能性があることです。

MainViewController.m

- (IBAction)showAllCBtnTapped:(id)sender
{
    AllContactsViewController *nAllCVC = [[AllContactsViewController alloc]init];
    nAllCVC.allContactsArray = self.contactsArray; // Properly passed the data???
    nAllCVC.delegate = self;
    nAllCVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

    [self presentModalViewController:nAllCVC animated:YES];
}

AllContactsViewController.h

@interface AllContactsViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

AllContactsViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdent = @"ContactCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdent];

    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdent];
    }

    NewContact *tempContact = [[NewContact alloc]init];

    tempContact = [self.allContactsArray objectAtIndex:[indexPath row]];

    cell.textLabel.text = tempContact.firstName;

    NSLog(@"%@", tempContact.firstName);
    NSLog(@"Test......");

    cell.imageView.image = tempContact.contactPicture;

    [tableView reloadData];

    return cell;
}

ノート:

AllContactsViewControllerからサブクラス化されていることがわかりますが、デリゲートとデータソースを適切に設定したにもかかわらずUIVIewController、からサブクラス化する必要がありますか?UITableViewController

4

3 に答える 3

0

皆さん、ご協力ありがとうございます。1 分前に で を再初期化しarrayviewDidLoadことAllContactsViewControllerがわかりました。そのため、値を受け取った直後に値が上書きされたと思います。この行を削除したところ、オブジェクト プロパティがtableview. 良い1日を

于 2012-08-16T12:22:51.587 に答える
0

ビューコントローラーを作成すると、その配列は最初は空であるため、データソースメソッドから、テーブルビューは(任意の)セクションの行数がゼロであるという情報を取得します-したがって、セルのデータソースを呼び出すことはありません表示されます。可能な解決策:

1。を呼び出した後、以下nAllCVC.allContactsArray = self.contactsArray;を呼び出します[nAllCVC.tableView reloadData];(nAllCVC がそのプロパティを介してそのテーブル ビューを公開すると仮定します)。

二。テーブル ビューのデータ配列を @synthesize する代わりに、テーブル ビューを自動的に呼び出すカスタムのゲッターとセッターを提供します。このようなもの:

- (NSArray *)allContactsArray {
    return _allContactsArray;
}

- (void)setAllContactsArray:(NSArray *)a {
    if (_allContactsArray == a) return;

    [_allContactsArray release];
    _allContactsArray = [a retain];

    [_tableView reloadData];
}

P. s .: ポインタとそれらが指すメモリを混同しています。NewContact *tempContact = [[NewContact alloc]init];余分であり、メモリリークしています。

P. ps: すべてのセルを要求したときにテーブル ビューをリロードしないでください。無限ループに陥る可能性があります。

于 2012-08-15T11:20:37.677 に答える
0

いくつかの確認事項:

1) のプロパティ宣言はどのようallContactsArrayAllContactsViewController見えますか? ですか@property(retain)

UITableViewController2)生活は楽になりますが、サブクラスを強いられることはありません。あなたの場合、デリゲートdelegatedataSourceあなたのデリゲートUITableViewが正しく設定されていることを確認してください。

3) 配列からオブジェクトを取得するため、コードNewContact *tempContact = [[NewContact alloc]init];はまったく必要ありません。

4) コード行を削除します[tableView reloadData];

5) デリゲート メソッド- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)sectionが正しく実装されていることを確認する

于 2012-08-15T11:19:09.987 に答える