При получении didReceiveMemoryWarning делегат UIImageViewController равен нулю - PullRequest
0 голосов
/ 30 января 2012

Я пытаюсь выяснить, почему, когда мое приложение получает didReceiveMemoryWarning, в то время как UIImagePickerController имеет контроль, средство выбора (и, следовательно, делегат средства выбора) устанавливается в освобожденный контроллер представления?

Один вызов контроллера представления

self.postImagePicker = [[UIImagePickerController alloc] init];
self.postImagePicker.delegate = self;
self.postImagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
self.postImagePicker.allowsEditing = YES;
[self presentModalViewController:self.postImagePicker animated:YES];

Далее отображается UIImageViewController и выбирается изображение.Затем смоделируйте предупреждение памяти.Контроллер представления, представивший диалоговое окно, получает ошибку предупреждения о памяти, и средство выбора установлено на 0x0 (что означает, что делегат также теперь недействителен).

Я использую ARC.Что-то изменилось в способе вызова UIImageViewController, так что представление, представившее его, не перезагружается, в результате чего указатель на UIImageViewController стал недействительным?

Ответы [ 2 ]

0 голосов
/ 30 января 2012

Я собираюсь догадаться, что вы nil редактировали свой контроллер вида в каком-то другом контроллере вида viewDidUnload. Нет никакой причины для освобождения вашего контроллера представления, если он не был явно освобожден (или вы не сохранили ссылку strong на него).

0 голосов
/ 30 января 2012

Чек didReceiveMemoryWarning.У вас есть self.postImagePicker = nil; там?Проверьте методы didReceiveMemoryWarning для ваших контроллеров вышестоящего представления.У них есть ссылка на этот контроллер представления?Если нет, навигационный контроллер может выгружать этот контроллер представления.delegate является слабым эталоном, поэтому недостаточно держать ваш контроллер вида рядом, если ничего другого нет.

...