初始化 NSMutableArray

Posted

技术标签:

【中文标题】初始化 NSMutableArray【英文标题】:Initialize NSMutableArray 【发布时间】:2011-06-30 23:52:21 【问题描述】:

我是 xcode 3 的新手,我真的需要帮助

我使用 UITableView 和 XML 开发了我的应用程序来显示内容。

我有 3 个 .xib 文件,分别是 rootViewController、SecondViewController 和 mainview。

所以问题是: 当我尝试在 rootViewController 中执行 didSelectrow 并访问 SecondViewController 中的 NSMutableArray *array 并在推送动画之前用 rootViewController 中的新数组值替换 *array 值时。

我的 SecondViewController 上的数组值第一次更改,但是当我按下后退按钮并选择另一行时,我的 SecondViewController 数组保持读取前一个数组而不是更改为新数组。我尝试初始化但没有运气

这是我在 rootViewController UITableview (didSelectRow) 上的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    if(2ndController == nil)

2ndController = [[DetailViewController alloc] initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]];

    //Declare xml NSMutable array record
    ListRecord *record = [self.entries objectAtIndex:indexPath.row];

    //access SecondViewController NSMutable *record
    2ndController.record = [[[NSMutableArray alloc] init] autorelease];   

        //inserting the value from firstview to secondview before push
    2ndController.record = record;



    //push animation
    [self.navigationController pushViewController:2ndController animated:YES];




这是我的第二个视图控制器:

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    

    switch(indexPath.section)
    
        case 0:

            [cell setText:record.name];
            break;
        case 1:

            [cell setText:record.Age];
            break;
        case 2:
        [cell setText:record.summary];
            break;
    

    return cell;

希望有人可以帮助我..

提前谢谢.....

【问题讨论】:

那么ListRecord是NSMutableArray的子​​类吗?我很困惑,因为您说您正在设置一个数组,但看起来您实际上是在设置 ListRecord* 类型的属性“记录” 【参考方案1】:

几件事,

你会的,

2ndController.record = [[[NSMutableArray alloc] init] autorelease];

并跟进

[cell setText:record.name];

显然,record 属性似乎不是NSMutableArray 的实例,所以我认为数组初始化部分与您所做的一样不正确,并且已经提到,

2ndController.record = record;

但我认为问题在于您保留了 UITableViewController 子类。您是否尝试过重新加载数据?

[self.tableView reloadData];

将其添加到您的DetailViewControllerviewWillAppear 方法中。

【讨论】:

谢谢各位....重新加载数据是我正在寻找的功能..用于初始化..我只是尝试并出错..我知道这是错误的..再次感谢:) 【参考方案2】:

你应该再看看这两行:

2ndController.record = [[[NSMutableArray alloc] init] autorelease];   

//inserting the value from firstview to secondview before push
2ndController.record = record;

第一行对你没有任何用处。它创建并初始化一个新的 NSMutableArray 并将记录属性设置为该新数组。

但是在下一行中,您再次将相同的“记录”属性设置为不同的对象,因此不再引用第一行中的数组。所以你可能还没有创建它。

这完全不是您的问题,但此评论太大而无法评论。 :)

【讨论】:

以上是关于初始化 NSMutableArray的主要内容,如果未能解决你的问题,请参考以下文章

Java的初始化块

Kotlin类的初始化 ④ ( lateinit 延迟初始化 | ::属性名称.isInitialized 检查属性是否初始化 | lazy 惰性初始化 )

Kotlin类的初始化 ④ ( lateinit 延迟初始化 | ::属性名称.isInitialized 检查属性是否初始化 | lazy 惰性初始化 )

零初始化、静态初始化和值初始化有何不同?

类初始化与实例初始化

c语言,结构体数组怎么初始化