Хорошо, обо всем по порядку, вы получаете эту ошибку, как только вы входите во «вкладку», которая выполняет эти операции, да? Так что ошибка должна быть в вашем методе viewDidLoad. Во-вторых, ваша ошибка вызывает ошибку селектора, поэтому найдите место, где вы использовали @ селектор.
Вот ваша проблема, которая вызывает ошибку:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidEnterBackground:)
name:UIApplicationDidEnterBackgroundNotification
object:app];
Обратите внимание, что метод applicationDidEnterBackground имеет параметр (NSNotification *):
- (void)applicationDidEnterBackground:(NSNotification *)notification {
и все же вы отправляете приложение, которое является UIApplication:
UIApplication *app = [UIApplication sharedApplication]
Это единственное, что я могу видеть, это дать вам эту ошибку. Просто измените это на это, и ошибка должна исчезнуть:
- (void)applicationDidEnterBackground:(UIApplication*)application {
НАЧАТЬ РЕДАКТИРОВАТЬ:
Что касается сохранения изображения, я не знаю точно, как вы храните данные, но вот как я это сделаю.
- Используйте сохраненное свойство для хранения данных изображения.
ViewController.h
@interface ViewController
//Add this line
@property(retain) NSData* imageData;
@end
ViewController.m
//Remember to include this line somewhere in this file:
@synthesize imageData;
Когда вы собираетесь сохранить файл:
- (void)applicationDidEnterBackground:(UIApplication*)application {
self.imageData = [NSData dataWithData:UIImagePNGRepresentation(image.image)];
[self.imageData writeToFile:[self dataFilePath] atomically:YES];
}
Таким образом, вы не потеряете данные, и вам не нужно использовать массив. Просто добавьте эту строку в метод viewDidUnload:
self.imageData = nil;
КОНЕЦ РЕДАКТИРОВАНИЯ
Надеюсь, это поможет вам.