【问题标题】:Table view not updating according to bindings表视图未根据绑定更新
【发布时间】:2009-08-26 17:59:20
【问题描述】:

这是一个非常新手的问题,这是我以前做过很多次的事情,但这次我错过了一些东西。

在我的 AppDelegate.h 文件中,我声明了一个 NSArray 并将其设置为属性:

@interface AppDelegate : NSObject {
NSArray *lines;

}

@property(readwrite, retain) NSArray *lines;
@end

然后在 awakeFromNib 方法的 AppDelegate.m 文件中分配它:

lines = [[NSArray alloc] init];

然后我有一个设置lines数组的方法:

NSString *fileContents = [NSString stringWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/sometextfile.txt"] encoding:NSUTF8StringEncoding error:NULL];
lines = [fileContents componentsSeparatedByString:@"\n"];

我有一个绑定到AppDelegate.self.lines 的数组控制器,然后我有一个绑定到Array Controller.arrangedObjects 的表列。我可以确认数组正在更新(使用 NSLog 测试)但是表的内容没有更新(它仍然是空白的)。

我在这里遗漏了什么明显的东西吗?

【问题讨论】:

  • 不要做error:NULL。该陈述中有许多可能出错的地方,您确实不想不想知道发生了什么。

标签: objective-c cocoa cocoa-bindings nstableview


【解决方案1】:

如果您使用绑定,则不需要数据源。一个或另一个。

我有一个绑定到“AppDelegate.self.lines”的数组控制器……

为什么是self

@property(readwrite, retain) NSArray *lines;

不,在这里使用copy。否则,您会发现自己保留了其他人的可变数组,然后他们将对其进行变异。那么“你的”数组就会在你不知情的情况下发生变化。

然后我有一个设置lines数组的方法:

lines = [fileContents componentsSeparatedByString:@"\n"];

这就是表格不显示任何内容的原因。您没有通过属性,而是直接访问实例变量。直接实例变量访问不会导致 KVO 通知,因此数组控制器永远不会发现更改。

更糟糕的是,您正在泄漏旧数组(因为您只是简单地分配它而不释放它)并且保留了这个新数组。因为您没有保留新数组,所以该实例变量将很快保存一个死对象。自动保留是通过setLines:方法完成的,只有在你调用的时候才会被调用。

你需要通过属性:

self.lines = [fileContents componentsSeparatedByString:@"\n"];

属性访问是一个隐式访问器消息,因此它既保留数组(或复制它,一旦您按照我上面的建议更正了 @property)并发布 KVO 通知。

【讨论】:

    【解决方案2】:

    当你说你有一个绑定到列的排列对象时,你的意思是你设置了 tablview 数据源吗?如果不是,您将 tableview 数据源设置为 lines 数组

    【讨论】:

    • 好的,我有一个数组控制器,它的内容数组设置为 AppDelegate.self.lines。然后我将数组控制器的排列对象绑定到表格列。我还没有为 t 设置数据源,我需要吗?
    • ennukiller:绑定是数据源的替代品。
    【解决方案3】:

    您可能想read through this,它有一些很好的图表和解释。 ennukiller 说的是正确的,我认为这是您的数据源的问题。这是通过调用来完成的

    [aTable setDelegate:aDelegate];
    

    【讨论】:

    • 我尝试将数据源/委托设置为主应用程序委托和数组控制器,但均无效。
    猜你喜欢
    • 2010-12-28
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 2019-10-15
    相关资源
    最近更新 更多