Хорошо, я изучаю программирование в Objective-C и Cocoa, и я столкнулся с проблемой в проекте, над которым я работаю.Так что в моем коде у меня есть NSMutableArray (sources) объектов пользовательского класса.Каждый объект имеет имя NSString.Я пытаюсь получить табличное представление для отображения всех объектов в источниках по имени каждого объекта.
У меня есть класс делегата приложения, соответствующий протоколу NSTableViewDataSource, что означает наличие метода objectValueForTableColumn иМетод numberOfRowsInTableView.
В numberOfRowsInTableView у меня просто есть return [sources count];оператор, и он отлично работает.
В objectValueForTableColumn я возвращаю [[sources objectAtIndex: rowIndex] name] ;, но ничего не отображается.
Я добавил много операторов NSLog дляотладка, и я думаю, что я знаю, в чем проблема, но я не знаю, почему или как ее исправить.
Итак, внутри objectValueForTableColumn
массив sources равен nil.Внутри, numberOfRowsInTableView
, источники активны, и этот метод работает нормально.Теперь оба эти метода выполняются много раз, и каждый раз источники активны в numberOfRowsInTableView
, но nil в objectValueForTableColumn
.
Я заменил оператор return в objectValueForTableColumn
тестовой строкой return @ "."; и он отображает правильное количество строк в табличном представлении.Из-за этого я знаю, что табличное представление настроено правильно, помимо проблемы, с которой я сталкиваюсь с источниками.
Я не могу понять, почему источники работают в одном методе, а не в другом.Я также не нашел решения, чтобы заставить мой просмотр таблицы работать правильно.Буду признателен за любую помощь или понимание.
Спасибо, Алекс
редактировать:
- (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];
}
}