-->

根据绑定表视图中未更新(Table view not updating according to b

2019-07-03 19:05发布

这是一个非常新手的问题,这是值得很多次我都做了,但有什么我失踪这段时间。

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

@interface AppDelegate : NSObject {
NSArray *lines;

}

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

然后在awakeFromNib方法AppDelegate.m文件我的Alloc它:

lines = [[NSArray alloc] init];

然后,我有用于设置线阵列的方法:

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

我有绑定到一个阵列控制器这就是AppDelegate.self.lines然后我有绑定到表列Array Controller.arrangedObjects 。 我可以证实,该阵列被更新(使用的NSLog测试)然而,表中的内容没有被更新(它保持空白)。

有什么明显的,我在这里失踪?

Answer 1:

如果你使用绑定你并不需要一个数据源。 非此即彼。

我有一个绑定到“AppDelegate.self.lines”阵列控制器这就是...

为什么要self

@property(读写,保留)的NSArray *线;

不,用copy在这里。 否则,你会发现自己保留了别人的可变数组,他们便会发生变异。 那么,“你的”数组有没有你知道它改变。

然后,我有用于设置线阵列的方法:

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

这就是为什么该表没有显示任何东西。 你不打算通过属性,你直接访问实例变量。 直接实例变量的访问不会引起国际志愿者组织的通知,所以阵列控制器从来没有发现关于变更。

更糟的是,你在漏水旧数组(因为你只是在其分配不释放它),在保持这个新的数组。 因为你不持有新数组,该实例变量将很快举行一个死的对象。 自动保留通过完成setLines:方法,它只有当你把它被调用。

你需要去通过属性:

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

一个属性访问是一个隐式访问的消息,所以这二者保持阵列(或拷贝它,一旦纠正@property如我上面所建议的),并张贴KVO通知。



Answer 2:

当你说你有绑定到列arrangedObjects你的意思是你设置的tablview数据源? 如果没有你的实现代码如下数据源设置为线阵列



Answer 3:

你可能想通过这种阅读 ,它有一些很好的图表和说明。 什么ennuikiller要说的是正确的,我认为这是您的数据源的问题。 这是通过调用

[aTable setDelegate:aDelegate];


文章来源: Table view not updating according to bindings