gpt4 book ai didi

objective-c - 为什么 TableView 不显示绑定(bind)数据?

转载 作者:行者123 更新时间:2023-12-03 18:04:52 24 4
gpt4 key购买 nike

这是我生成数据的代码

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
[array initWithCapacity:20];
}

- (IBAction) readlog:(id)sender {
for (int i = 0; i < 20; i++) {
NSDictionary *d = [NSDictionary dictionaryWithContentsOfFile:[path stringByAppendingFormat:@"/%d.log",i]];
[array addObject:d];
}

}

- (IBAction) writelog:(id)sender {
for (int i = 0; i < 20; i++) {
NSMutableDictionary *d = [NSMutableDictionary dictionary];
NSString *name = [NSString stringWithFormat:@"testfile%d", i];
[d setObject:[NSDate date] forKey:@"date"];
[d setObject:[path stringByAppendingFormat:@"/%d.log", i] forKey:@"path"];
[d setObject:name forKey:@"name"];
[d writeToFile:[path stringByAppendingFormat:@"/%d.log", i] atomically:YES];
}

我将我的 TableView 列与带有键路径名称/路径/日期的appdelegate.array绑定(bind)但它没有显示数组中的任何数据..这里有什么问题吗?谢谢!

最佳答案

您尚未创建数组。

init 方法,包括 NSMutableArray 的 initWithCapacity:,初始化现有的(新创建的)实例。您还没有创建一个,因此您将 initWithCapacity: 消息发送到 nil,这意味着它没有任何效果。

您需要创建数组,然后初始化它,然后将其分配给您的array变量,最好都在同一行中。

还有一个问题,当您收到 applicationDidFinishLaunching: 消息时,您的 TableView 已经请求数组。你还没有,所以它一无所获;当您创建一个时,它已经向您询问并得到了答案,并且不知道应该再次询问。

initinitWithCoder: 中创建数组(我相信如果您的应用程序委托(delegate)位于 Nib 中,您将需要后者),并实现和使用 Key-Value-Coding-compatible accessor methods用值填充数组。当您向自己发送访问器消息时,您将引发 KVO 通知,该通知将提示 TableView 需要再次请求数组。直接给实例变量赋值不会造成这种效果。

其他一些事情......

您在两种不同的方法中拥有三个 [path stringByAppendingFormat:@"/%d.log", i] 表达式。不要重复自己。将其移至名为 logFileNameWithLogFileNumber: 的方法,并向自己发送该消息以生成文件名。这将使代码更清晰且更易于维护。

最后,就风格而言,您不应使用 stringByAppendingFormat:stringWithFormat: 来构造路径。使用 stringByAppendingPathComponent:(在本例中,与 stringWithFormat: 一起生成文件名)。清晰性和独立于路径名分隔符是优点。

关于objective-c - 为什么 TableView 不显示绑定(bind)数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3153378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com