Я новичок в языке программирования target-c и заметил странное поведение в управлении памятью.
В iOS 5 ARC включен по умолчанию, но объект выпущен слишком рано, может быть, кто-то может дать мне какой-нибудь совет.
Это тот случай:
У меня есть объект Dao, который извлекает данные из базы данных SQLite с помощью Core Data PersistenceStore.
Этот Дао реализует метод "getAllAuthors"
В моем viewController в методе viewWillAppear я загружаю эти данные, и данные загружаются, но когда я заполняю tableView, объекты равны (null).
Выкладываю код:
@synthesize authors;
@synthesize authorsTable;
@synthesize dao;
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
#pragma mark - View lifecycle
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"author in viewDidLoad: %@", [[authors objectAtIndex:0] name]);
}
- (void)viewDidUnload {
[super viewDidUnload];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
dao = [[CrossoverDao alloc] init];
authors = [NSArray arrayWithArray:[dao getAllAuthors]];
[authorsTable reloadData];
NSLog(@"author in viewWillAppear: %@", [[authors objectAtIndex:0] name]);
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[authorsTable reloadData];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
NSLog(@"author in viewWillDisappear: %@", [[authors objectAtIndex:0] name]);
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
NSLog(@"author in viewDidDisappear: %@", [[authors objectAtIndex:0] name]);
}
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation {
return YES;
}
#pragma mark -
#pragma mark UITableViewDataSource datasource
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"[AuthorsViewController::cellForRowAtIndexPath] Constructing row at indexPath: %d", indexPath.row);
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
if(indexPath.section == 0)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier];
else
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
}
cell.textLabel.text = [[authors objectAtIndex:indexPath.row] name];
cell.detailTextLabel.text = [[authors objectAtIndex:indexPath.row] bio];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tv numberOfRowsInSection:(NSInteger)section {
NSLog(@"author in numberOfRowsInSection: %@", [[authors objectAtIndex:0] name]);
return [authors count];
}
В cellForRowAtIndexPath автор имеет значение null. Любая подсказка?
Заранее спасибо