Некоторое время не может получить доступ к NSmanagedObject, возвращенному из формы fetchResultController - PullRequest
0 голосов
/ 01 мая 2011

Я боролся несколько дней из-за какой-то странной переиздания. Мой tableView немного другого типа, поэтому не может использовать NSFetchControllerDelegate. На самом деле три миниатюры в каждой строке, которые можно прикоснуться. Так что не могу использовать didSelectRowAtIndexPath.

Проблема после выполнения патча. Первый доступ к NSManagedObject вернулся с fetchedResultController objectAt indexPath работает ... но вторая попытка сделать доступ к освобожденному объекту, что означает, что объект уже перевыпущен.

Но чем больше меня сводит с ума, тем же функция в TableViewCellForRowAtIndexPath всегда работает.

#pragma mark AlbumListViewCellSelectionDelegate  ==> my custom delegate method**** 

- (void)albumContentsTableViewCell:(AlbumLibViewCell *)cell
    selectedPhotoAtIndexType:(NSUInteger)index {
//[self fetch];

NSLog(@"select !!!! %i",index);

lastSelectedRow=cell.rowNumber;


//[selectedAssets addObject:[assets objectAtIndex:(lastSelectedRow * imageNoPerRow) + index]];
int selectId =(lastSelectedRow * imageNoPerRow) + index;

if(albumCount >=(selectId+1)){


AlbumTag * album = (AlbumTag *)[fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForRow:selectId inSection:0]] ;
//scrollView 
    AutoScrollViewController *detailViewController =[[AutoScrollViewController alloc] init];
    detailViewController.hidesBottomBarWhenPushed=YES;


    detailViewController.selectedMoments = [album.moments allObjects];==> first work but overrelease every second try 
    detailViewController.initPhotoNumber = 0;

    // Pass the selected object to the new view controller.
    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];

}

та же функция, но каждый раз без проблем

- (UITableViewCell *)tableView:(UITableView *)tableView
    cellForRowAtIndexPath:(NSIndexPath *)indexPath {


NSString *CellIdentifier = @"AlbumLibViewCell";

AlbumLibViewCell *cell = (AlbumLibViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];


if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"AlbumLibViewCell" owner:self options:nil];
    cell = tmpCell;
    tmpCell = nil;
}

cell.backgroundColor =[UIColor  blackColor];
cell.rowNumber = indexPath.row;
cell.selectionDelegate = self;

// Configure the cell...
NSUInteger firstPhotoInCell = indexPath.row * imageNoPerRow;
NSUInteger lastPhotoInCell  = firstPhotoInCell + imageNoPerRow;

if (albumCount <= firstPhotoInCell) {
    NSLog(@"We are out of range, asking to start with photo %d but we only have %d", firstPhotoInCell, albumCount);
    return nil;
}

NSUInteger currentPhotoIndex = 0;
NSUInteger lastPhotoIndex = MIN(lastPhotoInCell, albumCount);
for (firstPhotoInCell ; firstPhotoInCell + currentPhotoIndex < lastPhotoIndex ; currentPhotoIndex++) {

    AlbumTag *albumCell = (AlbumTag *)[fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForRow:firstPhotoInCell + currentPhotoIndex inSection:0]];
    UIImage *thumbnail = albumCell.rpeMomentThumbnail;

    NSArray *moments =  [albumCell.moments allObjects]; ===> every time works fine

Может помочь любая идея для этой ситуации заранее все ценю.

1 Ответ

0 голосов
/ 01 мая 2011

Похоже, что объекты, передаваемые в detailViewController, освобождаются, но не сохраняются.Вы должны включить NSZombies для отладки этого.Если это не сработает, вы можете отследить историю размещения, используя инструмент ObjectAlloc в инструментах.

...