Сообщение отправлено в нераспределенную ошибку экземпляра - PullRequest
1 голос
/ 06 июня 2011

Я получаю сообщение о сбое, сказав *** -[CFString release]: message sent to deallocated instance 0x7021e80 в моем методе dealloc для строки [muscleURL release];

Инициирование для muscleURL равно @property (nonatomic, retain) NSString *muscleURL;

Это происходит только когда я нажимаюКнопка Готово в моем NavBar.Вот соответствующий код:

- (void)viewDidLoad
{
    UIBarButtonItem * doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissView)];
    [self.navigationItem setRightBarButtonItem:doneButton];
    [doneButton release];
}

-(void)dismissView
{
    [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:([self.navigationController.viewControllers count] -3)] animated:YES];
}

Редактировать:

В родительском представлении родительский вид muscleURL выглядит следующим образом

-(void)didSelectRowAtIndexPath
{
    NSString *muscleURL = [[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"musclePicture"];
    detailViewController.muscleURL = muscleURL;
}

Ответы [ 2 ]

0 голосов
/ 07 июня 2011
    NSString *muscleURL = [[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"musclePicture"];

Возвращает автоматически освобожденный объект, поэтому вам не нужно освобождать его в вашем методе dealloc, поскольку система уже освободила память. Для вас может быть хорошей идеей ознакомиться с управлением памятью в Objective-C, на веб-сайте Apple Developer есть документ.

0 голосов
/ 07 июня 2011

Попробуйте это.

- (void)viewDidLoad
{
UIBarButtonItem * doneButton = [[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissView)]autorelease]; 
[self.navigationItem setRightBarButtonItem:doneButton];

}

-(void)didSelectRowAtIndexPath
{
NSString *tempURL = [[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"musclePicture"];
detailViewController.muscleURL = tempURL;
}
...