0

设置:

MainViewController持有一个NSMutableArray对象。对象是 my 的一个实例,NewContact它有一个firstName和一个contactImageivar。当我点击时showAllContactsBtnMainViewController AllContactsViewController应该在桌子上显示所有对象 ivars (firstNamescontactImages)。

我认为问题在于我没有正确地将数据传递给AllContactsViewController但无法弄清楚如何修复它。值得一提的是,我没有看到其中的 NSLog语句,cellForRowAtIndex所以可能根本不会调用该方法?

主视图控制器.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

当您创建视图控制器时,它的数组最初是空的,因此从数据源方法中,表格视图获取(任何)部分中的行数为零的信息 - 因此它永远不会调用单元格的数据源要显示。可能的解决方案:

一。调用后nAllCVC.allContactsArray = self.contactsArray;,调用[nAllCVC.tableView reloadData];(假设 nAllCVC 通过该属性公开其表视图),或者更好:

二。代替 @synthesize-ing 表格视图的数据数组,提供一个自定义的 getter 和 setter 自动调用表格视图;像这样的东西:

- (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) 你的 in 财产声明是allContactsArray什么AllContactsViewController样子的?是@property(retain)吗?

UITableViewController2)尽管它使您的生活更轻松,但您不必被迫进行子类化。在您的情况下,请确保代表delegatedataSourceUITableView的设置正确。

3)这段代码NewContact *tempContact = [[NewContact alloc]init];根本没有必要,因为你从你的数组中获取你的对象。

4)删除代码行[tableView reloadData];

5)确保委托方法- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section正确实现

于 2012-08-15T11:19:09.987 回答
0

感谢大家的帮助,我在一分钟前发现我重新初始化了arrayin the viewDidLoadAllContactsViewController因此我认为这些值在我收到它们后就被覆盖了。我删除了该行,现在我看到在tableview. 祝你今天过得愉快

于 2012-08-16T12:22:51.587 回答