Вопрос

В моем файле UIView nib у меня есть UITableView, который занимает примерно половину экрана.Соответствующие файлы .h и .m являются:

// helloViewController.h
#import <UIKit/UIKit.h>
@interface helloViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
    NSArray *locationArray;
}
@property (nonatomic, retain) NSArray *locationArray;
@end

// helloViewController.m
@synthesize locationArray;
- (void)viewDidLoad {
    locationArray = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8",  @"9",  @"10",  @"11", nil];
    [super viewDidLoad];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    [[cell textLabel] setText: [locationArray objectAtIndex:[indexPath row]]];

    return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 8;
}

Когда я запускаю это, происходит сбой при попытке прокрутить таблицу (без ошибки в отладчике).Однако, если я заменю [[cell textLabel] setText:[locationArray объектатиндекс:[строка indexPath]]];с

[[cell textLabel] setText:@"Boom"];

...он не выходит из строя....

Что является причиной этой проблемы?Делегат и источник данных подключены к Владельцу файла в IB, и классу Владельца файла присвоен правильный класс.Проблема в том, что я использую табличное представление в uiview в nib?

Это было полезно?

Решение

Проблема в том, что вы устанавливаете locationArray к автоматически выпущенному объекту в viewDidLoad.Затем вы снова пытаетесь получить доступ к этому объекту, где вы хотите установить ячейку, но к тому времени массив был освобожден.

Вы должны использовать определенное вами свойство retain (вы устанавливаете массив напрямую, не используя свойство) и прочтите еще немного об управлении памятью. ;)

self.locationArray = [NSArray arrayWith...];

Другие советы

Вероятно, это потому, что ваш locationArray ранее не был сохранен и теперь указывает на мусорную память.Это, или locationArray не содержит элемента с указанным индексом.

Да , это из - за некоторой сохраненной памяти массива .Вы должны освободить Ivar массива Location методом dealloc.Используйте этот код

NSArray *array = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",nil];
self.locationArray = array ;
[array release];

В методе Dealloc

 [locationArray release];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top