UiimageWriteToSavedPhotosalBum с malloc_error
Вопрос
У меня есть файл NIB с кнопкой. Когда я нажимаю эту кнопку, называется селектор: селектор. Все работает, как и ожидалось (изображение сохраняется), Excectte по ошибке, брошенной Malloc.
malloc: *** error for object 0x184d000: pointer being freed was not allocated ***
set a breakpoint in malloc_error_break to debug
Я установил точку останова на Malloc_error_break, но я ничего не понимаю от отладчика. Я даже не мог найти объект 0x184d000. Кто -нибудь знает, почему это происходит? Я также попытался сохранить UIImage, прежде чем отправить его в UiimageWriteToSavedPhotosalBum, но без успеха.
Мой код ниже:
- (IBAction)setWallpaper:(id)sender {
UIImage *image = [UIImage imageNamed:@"wallpaper_01.png"];
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:NSLocalizedString(@"Galo!!!",@"Saved image message: title")
message:NSLocalizedString(@"Now, check your \"saved photos\" group at \"photos\" app in your iPhone and select the actions menu > set as wallpaper.",@"Saved image message")
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK",@"OK Button")
otherButtonTitles:nil];
[alertView show];
[alertView release];
}
Решение
Хорошо, после клонирования почти всего моего проекта я понял, что проблема возникает от OS3.0. Изменено на OS3.1, и все работает просто отлично. Спасибо за помощь, Карл!
Другие советы
UIImageWriteToSavedPhotosAlbum
Сохранение асинхронно, что означает, что вы должны убедиться UIImage
Остается на все это время. Вы передаете ему объект с автооперацией, поэтому он когда -нибудь рухнул, пытаясь сделать сохранение. Изменять setWallpaper:
отправлять retain
в UIImage
. Анкет Тогда ты можешь release
или же autorelease
Это в вашем обратном вызове, чтобы избежать протечки. Пример:
Измените линию, которая получает изображение:
UIImage *image = [[UIImage imageNamed:@"wallpaper_01.png"] retain];
Затем добавьте
[image release];
в обратном вызове.