UIAlertView с подпредставлением, анимирующим к новому представлению, вылетает приложение - PullRequest
0 голосов
/ 31 мая 2010
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Congratulations" message:message delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"View", nil];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(110, 100, 80, 80)];
NSString *imagePath = [NSString stringWithFormat:@"%@", [Array objectAtIndex:x]];
UIImage *bkgImg = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:imagePath ofType:@"png"]];
imageView.image = bkgImg;
[bkgImg release];
[alert addSubview:imageView];
[imageView release];
[alert show];
[alert release];    

Это код, который я использую для создания представления предупреждений. В настоящее время он настроен таким образом, что если пользователь нажимает одну из кнопок, он загружает новый viewcontroller. Это работало нормально, пока я не добавил подпредставление в UIAlertView. Теперь, когда он анимируется на новый экран, он просто вылетает из программы. Я довольно новичок в разработке для iPhone, и любая помощь будет оценена.

1 Ответ

1 голос
/ 31 мая 2010

Вы делаете:

UIImage *bkgImg = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:imagePath ofType:@"png"]];
...
[bkgImg release];

Но +imageWithContentsOfFile возвращает автоматически выпущенный экземпляр UIImage, поэтому вы должны не выпускать его самостоятельно. Вероятно, происходит то, что NSAutoreleasePool отправляет -release объекту, который уже был освобожден, вызывая сбой приложения позже.

Я бы порекомендовал взглянуть на http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html (или эквивалентные документы для iPhone, если таковые имеются).

...