2010-09-03 2 views
0

У меня проблема с моим приложением при тестировании на моем iphone. У меня есть метод, который сочетает в себе четыре изображения в одном и сохраняет его в библиотеке фотографий:Приложение для iPhone падает при сохранении изображения в библиотеке

- (UIImage *)combineImages{ 
     UIImage *image1 = firstImgView.image; 
     UIImage *image2 = secondImgView.image; 
     UIImage *image3 = thirdImgView.image; 
     UIImage *image4 = fourthImgView.image; 

     UIGraphicsBeginImageContext(image1.size); 

     [image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)]; 
     [image2 drawInRect:CGRectMake(0, 0, image2.size.width, image2.size.height)]; 
     [image3 drawInRect:CGRectMake(0, 0, image3.size.width, image3.size.height)]; 
     [image4 drawInRect:CGRectMake(0, 0, image4.size.width, image4.size.height)]; 

     UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 

     UIGraphicsEndImageContext(); 

     return resultingImage; 
    } 
//save actual design in photo library 
- (void)savePicture{ 
    UIImage *myImage = [self combineImages]; 
    UIImageWriteToSavedPhotosAlbum(myImage, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), self); 
} 

//feedback if picture saving was successfull 
- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { 
    NSString *message; 
    NSString *title; 
    if (!error) { 
     title = NSLocalizedString(@"Image saved", @""); 
     // message = NSLocalizedString(@"Your image was saved", @""); 
    } else { 
     title = NSLocalizedString(@"Error", @""); 
     message = [error description]; 
    } 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title 
                message:message 
                delegate:nil 
              cancelButtonTitle:NSLocalizedString(@"Ok", @"") 
              otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
} 

Когда я хочу, чтобы проверить его я получаю следующее сообщение об ошибке:

Program received signal: “EXC_BAD_ACCESS”. 
Data Formatters temporarily unavailable, will re-try after a 'continue'. (Not safe to call dlopen at this time.) 
warning: Cancelling call - objc code on the current thread's stack makes this unsafe. 

В тренажере это работает хорошо.

ответ

0

Если изображения составляют более 1k x 1k пикселей, то я предполагаю, что на устройстве у вас закончилась нехватка памяти. Симулятор имеет больше доступной памяти. Запустите выделение памяти Instrument на сборке Simulator и посмотрите, сколько на самом деле потребляют ваши изображения и операция компоновки, пик.

+0

Фотографии все 320x460. – Crazer

0

Я предполагаю, что вы должны сохранить комбинированное изображение перед передачей его в UIImageWriteToSavedPhotosAlbum. Комбинированное изображение автореализовывается и может быть освобождено до того, как будет выполнено фактическое сохранение. Попробуйте следующее:

//save actual design in photo library 
- (void)savePicture{ 
    UIImage *myImage = [self combineImages]; 
    [myImage retain]; 
    UIImageWriteToSavedPhotosAlbum(myImage, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), self); 
} 

//feedback if picture saving was successfull 
- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { 
    [image release]; 
    // ... 
} 
+0

Привет Гобра, изображение сохраняется в библиотеке, но я не получаю «сохраненное предупреждение», и приложение затем замораживается. – Crazer

+0

... и ошибка, которую я разместил выше, остается. – Crazer

0

Обнаружили ошибку ... вид немой ошибки. Именно эта линия

// message = NSLocalizedString(@"Your image was saved", @""); 

Я должен не заметил его. Теперь все работает нормально.

Смежные вопросы