tableview reloadData不起作用... - NSArray无效摘要

时间:2011-07-09 14:18:13

标签: cocoa-touch uitableview nsarray datasource uisplitviewcontroller

我已经阅读了很多关于这个主题的帖子,但我无法找到解决问题的答案...因此我希望,你可以帮助我:

我有一个带有SplitViewController模板的iPad应用程序。所以RootViewController是UITableViewController的类型。我的数据存储在两个数组中,这些数组由XMLParser(类SyncController)填充。但是tableView没有显示数据...

首先我在AppDelegate中调用解析器:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    // Add the split view controller's view to the window and display.


    self.window.rootViewController = self.splitViewController;
    [self.window makeKeyAndVisible];

    syncController = [[SyncController alloc] init];

    [syncController syncData];

    return YES;
}

有效。 SyncController正在解析XML,在最后,我有两个填充了我的数据的SyncController的实例变量(NSMutableArrays),我想转移到我的RootViewController:

rootViewController.visitorNames = [[NSArray alloc] initWithArray:self.visitorNames];
rootViewController.visitorCompanies = [[NSArray alloc] initWithArray:self.visitorCompanies];
[rootViewController.tableView reloadData];

reloadData似乎有效:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"comp count: %u", [self.visitorCompanies count]);
return [self.visitorCompanies count]; }

控制台显示正确数量的元素...... 但是,不会调用cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"testghjgjggjgjggjghjghjghjghjghjghjjhgghj");
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }


// Configure the cell.
cell.textLabel.text = [self.visitorCompanies objectAtIndex:indexPath.row];

return cell;
}

没有控制台输出。 所以我在numberOfRowsInSection设置了一个断点来查看实例Variables

Debug Output

它们似乎没问题,但是当你查看tableView的_dataSource时,你会发现有一个无效的摘要......

我认为这就是我的TableView不起作用的原因。

信息:如果我不使用SyncController并在RootViewController的viewDidLoad中使用固定值初始化NSArrays,它可以正常工作

1 个答案:

答案 0 :(得分:0)

当你不通过SyncController加载数据时工作正常,我认为表格视图的数据源工作正常,NSLog()产生的输出也表明了这一点。

SyncController一定有问题。您的代码示例是:

rootViewController.visitorNames = [[NSArray alloc]
                                   initWithArray:self.visitorNames];
rootViewController.visitorCompanies = [[NSArray alloc]
                                       initWithArray:self.visitorCompanies];
[rootViewController.tableView reloadData];

此代码发生在SyncController,不是吗?还有:

// is self instance of SyncController, the app delegate ?
syncController = [[SyncController alloc] init];
// syncController.rootViewController = self.rootViewController ?
[syncController syncData];

在同步数据之前,您不应该设置此属性吗?

否则,如果您的app委托和根视图控制器都具有名为visitorNamesvisitorCompanies的属性,您应该向syncController对象发送对您的app委托的引用,以便用一些数据填充数组。

你也可以参考这个问题&答案:invalid summary problem while debugging in Xcode … 希望这会有所帮助。