NSIndexPath: сообщение отправлено на освобожденный экземпляр - PullRequest
1 голос
/ 23 ноября 2010

Буду признателен за любую помощь, которую вы можете предложить.

У меня есть приложение, в котором есть tableView, detailView, flipView и moreDetail View.Он прекрасно двигается по переходам до 26-го элемента.Приложение вылетает, когда я нажимаю кнопки, которые переходят к флипу и moreDetailView.

Мне выдается сообщение об ошибке: [NSIndexPath row] message sent to deallocated instance.

Я думаю, что я могу вызывать indexPath слишком много раз, но почему все работает хорошо до тех пор, пока25 элемент, а потом перестать работать?Как NSIndexPath был освобожден?Я никогда не отменял это.

Если вы знаете, пожалуйста, помогите.Спасибо !!!

Xcode говорит, что проблема здесь:

@implementation produceView aka *detailView*

- (IBAction)showInfo {

        FlippedProduceView *fView = [[FlippedProduceView alloc]initWithIndexPath:index];
    fView.flipDelegate = self;


    fView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:fView animated:YES];
         [fView release]; 

}


 - (IBAction) buttonPushed:(id)sender

{

    picView *pictureView = [[picView alloc]initWithIndexPath:index];


    pictureView.picDelegate = self;
    pictureView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;     

    [self presentModalViewController:pictureView animated:YES];
        [pictureView release];
}

-(id)initWithIndexPath:(NSIndexPath *)myIndexPath {   
if (self == [super init]) {
            path = myIndexPath;

    }
    return self;

}

@implementation picView aka *moreDetailView*

- (void)viewDidLoad {
    RipeGuideAppDelegate *AppDelegate = (RipeGuideAppDelegate *)[[UIApplication sharedApplication] delegate];
    self.picViewArray = AppDelegate.arrayProduceInfo;

    NSMutableDictionary *dictionary = [picViewArray objectAtIndex:path.row];
}

@implementation FlippedProduceView aka *flipView*


- (id)initWithIndexPath:(NSIndexPath *)myIndexPath {
    if (self == [super init]) {
        indexes = myIndexPath;
    }
    return self;
}

- (void)viewDidLoad {
    RipeGuideAppDelegate *AppDelegate = (RipeGuideAppDelegate *)[[UIApplication sharedApplication] delegate];
    self.flipViewArray = AppDelegate.arrayProduceInfo;

    NSMutableDictionary *dictionary = [flipViewArray objectAtIndex:indexes.row];
}

1 Ответ

12 голосов
/ 23 ноября 2010

Вы должны использовать свойства (@property (retain) NSIndexPath *path;) вместо переменных экземпляра, поэтому, когда вы делаете self.path = myIndexPath, тогда увеличивается количество сохраняемых данных, поэтому оно не будет освобождено при автоматическом освобождении IndexPath.

...