gpt4 book ai didi

macos - NSMutableArray 在 NSTableView 中显示时丢失的元素被调用

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

我试图将数组的内容显示到 TableView 中。 TableView 有单列。我的类是 RKCandidate,它是 NSWindowController 的子类。 RKCandidate 也是“nib”文件的所有者。在 IB 中,我选择了文件的所有者作为 TableView 的数据源。

我正在使用一些方法来更新表格 View ,

- (id) initWithClient:(TextInputController *) client
{
self = [super initWithWindowNibName:@"RKCandidate"];
if (self != nil) {
_client = client;

}
return self;
}

- (void) dealloc
{
[optionsArray release];
[super dealloc];
}
- (void) updateCandidate {

NSLog(@"updateCandidate Called.\n");

optionsArray = [_client composedStringArray:self];
[candidateOptions reloadData];

NSLog(@"Retain Count of OptionsArray: %i\n",[optionsArray retainCount]);
NSLog(@"Object Count of OptionsArray: %i\n",[optionsArray count]);
NSLog(@"Address of Object: %i\n",[optionsArray objectAtIndex:0]);
NSLog(@"Object: %@\n",[optionsArray objectAtIndex:0]);
//NSString *benChar = [optionsArray objectAtIndex:0];
//NSLog(@"Object Retain Count: %@i\n",[benChar retainCount]);
}
#pragma mark TableView Data Source Methods
#pragma mark -

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView {

NSLog(@"Retain Count of OptionsArray: %i\n",[optionsArray retainCount]);
NSLog(@"Object Count of OptionsArray: %i\n",[optionsArray count]);
NSLog(@"Address of Object: %i\n",[optionsArray objectAtIndex:0]);
NSLog(@"Object: %@\n",[optionsArray objectAtIndex:0]);
//NSLog(@"Object Retain Count: %@i\n",[[optionsArray objectAtIndex:0] retainCount]);

return [optionsArray count];
}

- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn
row:(NSInteger)rowIndex {

NSLog(@"Retain Count of OptionsArray: %i\n",[optionsArray retainCount]);
NSLog(@"Object Count of OptionsArray: %i\n",[optionsArray count]);
NSLog(@"Address of Object: %i\n",[optionsArray objectAtIndex:0]);
NSLog(@"Object: %@\n",[optionsArray objectAtIndex:0]);
//NSLog(@"Object Retain Count: %@i\n",[[optionsArray objectAtIndex:0] retainCount]);

return [optionsArray objectAtIndex:rowIndex];
}

optionsArray 通过客户端的简单方法进行更新,方法如下,

-(NSMutableArray *) composedStringArray:(id)sender {

NSLog(@"returning composedStringArray.\n");

return convertBufferArray;
}

convertBufferArray 是一个可变数组。

第一次调用updateCandidate方法时。效果很好。但是当我在更新客户端内的 convertBufferArray 数组后第二次调用它时,问题就开始了。

第一次调用updateCandidate方法时,Console日志如下:

2010-11-20 09:03:35.385 Input Method Tester[7225:a0f] Retain Count of OptionsArray: 1
2010-11-20 09:03:35.385 Input Method Tester[7225:a0f] Object Count of OptionsArray: 1
2010-11-20 09:03:35.386 Input Method Tester[7225:a0f] Address of Object: 1372384
2010-11-20 09:03:35.386 Input Method Tester[7225:a0f] Object: ∆
2010-11-20 09:03:35.392 Input Method Tester[7225:a0f] Retain Count of OptionsArray: 1
2010-11-20 09:03:35.392 Input Method Tester[7225:a0f] Object Count of OptionsArray: 1
2010-11-20 09:03:35.393 Input Method Tester[7225:a0f] Address of Object: 1372384
2010-11-20 09:03:35.393 Input Method Tester[7225:a0f] Object: ∆
2010-11-20 09:03:35.397 Input Method Tester[7225:a0f] Retain Count of OptionsArray: 1
2010-11-20 09:03:35.397 Input Method Tester[7225:a0f] Object Count of OptionsArray: 1
2010-11-20 09:03:35.398 Input Method Tester[7225:a0f] Address of Object: 1372384
2010-11-20 09:03:35.399 Input Method Tester[7225:a0f] Object: ∆

表格 View 显示数组的内容。

但是,当我向 Object 字符串添加另一个字母时,不知何故,当 - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex 被调用。日志如下。

2010-11-20 09:03:38.349 Input Method Tester[7225:a0f] returning composedStringArray.
2010-11-20 09:03:38.350 Input Method Tester[7225:a0f] Retain Count of OptionsArray: 1
2010-11-20 09:03:38.351 Input Method Tester[7225:a0f] Object Count of OptionsArray: 1
2010-11-20 09:03:38.352 Input Method Tester[7225:a0f] Address of Object: 1372384
2010-11-20 09:03:38.353 Input Method Tester[7225:a0f] Object: ƍ
2010-11-20 09:03:38.354 Input Method Tester[7225:a0f] Retain Count of OptionsArray: 1
2010-11-20 09:03:38.354 Input Method Tester[7225:a0f] Object Count of OptionsArray: 1
2010-11-20 09:03:38.354 Input Method Tester[7225:a0f] Address of Object: 1372384
2010-11-20 09:03:38.355 Input Method Tester[7225:a0f] Object: ƍ
2010-11-20 09:03:38.358 Input Method Tester[7225:a0f] Retain Count of OptionsArray: 1
2010-11-20 09:03:38.358 Input Method Tester[7225:a0f] Object Count of OptionsArray: 1
2010-11-20 09:03:38.359 Input Method Tester[7225:a0f] Address of Object: 1372384
2010-11-20 09:03:38.359 Input Method Tester[7225:a0f] Object:

正如您在上面日志的列表行中看到的,该字符串为空。 tableView 变空。

我做错了什么吗?我尝试放置版本并保留 optionsArray 但结果是相同的。我还尝试将 composedBufferArray 的内容复制到 optionsArray 中。我尝试放置

optionsArray = [_client composedStringArray:self];

进入init方法。所有情况的结果都是相同的。

请帮忙。我这两天没能解决这个问题。请帮忙。

抱歉,我无法发布图像或链接,因为我是 Stack Overflow 的新手。

问候,

雷亚恩

最佳答案

第一:

不要调用retainCount

它对于调试来说毫无用处,并且返回的数字通常具有完全的误导性。对于初学者来说,对象永远不会为保留计数返回 0,因此,尝试使用 retainCount 查找过度释放的对象是完全徒劳的。

您的错误看起来像是内存管理问题。它没有崩溃只是运气。

您应该阅读Cocoa Memory Management Guide几次(直到理解——当我开始使用 Objective-C 时,我发现阅读几次语言文档非常有值(value))。

你的-init方法看起来很可疑; _client = client; 不会保留 _client

您还应该在代码上使用“构建和分析”。 llvm 静态分析器将识别代码中的大多数内存管理问题。

最后,学习使用僵尸检测仪。查看一些答案 here了解更多信息。

关于macos - NSMutableArray 在 NSTableView 中显示时丢失的元素被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4232055/

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