【发布时间】:2011-04-04 02:56:19
【问题描述】:
好的,所以我正在学习 Objective-C 和 Cocoa 中的编程,并且在我正在处理的项目中遇到了一个问题。所以在我的代码中,我有一个自定义类的对象的 NSMutableArray(源)。每个对象都有一个 NSString 名称。我正在尝试获取一个表格视图,以按每个对象的名称显示源中的所有对象。
我有一个遵循 NSTableViewDataSource 协议的应用委托类,这意味着有一个 objectValueForTableColumn 方法和一个 numberOfRowsInTableView 方法。
在 numberOfRowsInTableView 中,我只有一个返回 [sources count];声明,它工作正常。
在 objectValueForTableColumn 中,我返回了 [[sources objectAtIndex: rowIndex] name];,但没有显示任何内容。
我已经添加了很多NSLog语句进行调试,我想我知道问题是什么,但我不知道为什么,或者如何解决它。
所以,在objectValueForTableColumn 中,源数组为 nil。在内部,numberOfRowsInTableView,源是活动的,并且该方法工作正常。现在,这两种方法都运行了很多次,并且每次都在 numberOfRowsInTableView 中激活源,但在 objectValueForTableColumn 中为 nil。
我将objectValueForTableColumn 中的return 语句替换为return @"Test string.";,它在表格视图中显示了正确的行数。正因为如此,我知道表格视图设置正确,除了我在来源方面遇到的问题。
我不明白为什么来源在一种方法中有效,而在另一种方法中无效。我也没有找到让我的表格视图正常工作的解决方案。任何帮助或见解将不胜感激。
谢谢, 亚历克斯
编辑:
- (void) loadFromFile
{
NSString *filePath = @"/Users/alex/opt/Wallify.plist";
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: filePath])
{
NSData *data = [[NSData new] initWithContentsOfFile: filePath];
NSLog(@"Loaded data from file.");
self.sources = [NSKeyedUnarchiver unarchiveObjectWithData: data];
[data release];
for ( ATImageSource *i in sources)
{
NSLog(@"retaining i");
[i retain];
}
[sources retain];
NSLog(@"&imgsrc: %p", sources);
NSLog(@"imgsrc: %@", sources);
NSLog(@"Name: %@",[[sources objectAtIndex: 0] name]);
}
else
{
// Saved settings file does not exist
// Load defaults
self.sources = [[NSMutableArray alloc] initWithArray: nil];
[self.sources retain];
// new code to setup testfoldersrc
ATFolderSource *f = [ATFolderSource new];
f.name = @"Documents";
f.source = @"/Users/alex/Documents/";
f.localPath = @"/Users/alex/Documents/";
f.type = @"f";
[f populateArrayFromLocalPath];
[self.sources addObject: f];
[f release];
// new code to setup testrsssrc
ATRSSSource *r = [ATRSSSource new];
r.name = @"NASA Large Image of the Day";
r.source = @"http://www.nasa.gov/rss/lg_image_of_the_day.rss";
r.localPath = @"/Users/alex/opt/nasa_lg_image_of_the_day/";
r.type = @"r";
[r getImagesFromRSS];
[r populateArrayFromLocalPath];
[self.sources addObject: r];
[r release];
}
}
【问题讨论】:
-
如何在 [[sources objectAtIndex: rowIndex] name] 行设置断点,看看断点是什么来源。我也会 NSLog 那一行的结果是什么。
-
在 objectValueForTableColumn 内部,sources 始终为 null,因此 [[sources objectAtIndex: rowIndex] name] 也为 null。我在这个方法中有一个 NSLog,它显示了源的值和 [[sources ...] name] 的值。
标签: objective-c cocoa macos