Я пытался отобразить содержимое массива в табличном представлении. Представление таблицы имеет один столбец. Мой класс RKCandidate , который является подклассом NSWindowController . RKCandidate также является владельцем файла 'nib'. В IB я выбрал владельца файла в качестве источника данных для таблицы.
Существуют методы, которые я использую для обновления таблицы,
- (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 вызывается с первого раза, когда журнал консоли выглядит следующим образом:
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: ∆
В табличном представлении отображается содержимое массива.
Но когда я просто добавляю еще одну букву в строку 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 , но результат тот же. Я также пытался скопировать содержимое compedBufferArray в optionsArray . Я пытался поставить
optionsArray = [_client composedStringArray:self];
в метод init. Результат одинаков для всех случаев.
Пожалуйста, помогите. Я не мог решить эту проблему за последние два дня. Пожалуйста, помогите.
Извините, я не смог опубликовать изображение или ссылку, так как я совершенно новый в Stack Overflow.
С уважением,
Raiyan