这是一个非常新手的问题,这是值得很多次我都做了,但有什么我失踪这段时间。
在我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测试)然而,表中的内容没有被更新(它保持空白)。
有什么明显的,我在这里失踪?
如果你使用绑定你并不需要一个数据源。 非此即彼。
我有一个绑定到“AppDelegate.self.lines”阵列控制器这就是...
为什么要self
?
@property(读写,保留)的NSArray *线;
不,用copy
在这里。 否则,你会发现自己保留了别人的可变数组,他们便会发生变异。 那么,“你的”数组有没有你知道它改变。
然后,我有用于设置线阵列的方法:
lines = [fileContents componentsSeparatedByString:@"\n"];
这就是为什么该表没有显示任何东西。 你不打算通过属性,你直接访问实例变量。 直接实例变量的访问不会引起国际志愿者组织的通知,所以阵列控制器从来没有发现关于变更。
更糟的是,你在漏水旧数组(因为你只是在其分配不释放它),在保持这个新的数组。 因为你不持有新数组,该实例变量将很快举行一个死的对象。 自动保留通过完成setLines:
方法,它只有当你把它被调用。
你需要去通过属性:
self.lines = [fileContents componentsSeparatedByString:@"\n"];
一个属性访问是一个隐式访问的消息,所以这二者保持阵列(或拷贝它,一旦纠正@property
如我上面所建议的),并张贴KVO通知。
当你说你有绑定到列arrangedObjects你的意思是你设置的tablview数据源? 如果没有你的实现代码如下数据源设置为线阵列
你可能想通过这种阅读 ,它有一些很好的图表和说明。 什么ennuikiller要说的是正确的,我认为这是您的数据源的问题。 这是通过调用
[aTable setDelegate:aDelegate];