Обновление: я не мог найти причину проблемы, с которой я использовал бета-версию SDK, и при использовании окончательного SDK проблема исчезла. Я не знаю, что я сделал неправильно. Сожалею. Я хотел удалить это, но не смог.указатель освобождения не был назначен
Здравствуйте у меня есть следующее сообщение об ошибке:
таНос: * ошибка для объекта 0x2087000: указатель освобождения не было выделено * установить контрольную точку в malloc_error_break для отладки
Я понятия не имею, что объект, который есть. Я не знаю, как его найти. Может ли кто-нибудь объяснить мне, как (и где) использовать malloc_history. Я установил точку останова в malloc_error_break, но я не смог узнать, какой объект находится на этом адресе. Я получаю это после удаления объекта из nsmutablearray и нажатия контроллера вида вручную. Если я прокомментирую строку [reviewUpload.images removeObject: self.reviewUploadImg], это не дает мне ошибку, но, конечно, для меня это не полезно.
- (void) removeImage { debugLog(@"reviewUploadImg %@", self.reviewUploadImg); debugLog(@"reviewUpload %@", self.reviewUpload); debugLog(@"reviewUploadImg thumb %@", self.reviewUploadImg.thumb); [reviewUpload.images removeObject: self.reviewUploadImg]; [self.navigationController popViewControllerAnimated:TRUE]; }
Я попытался распечатать 3 адреса, но ни один из них не был адресом, который освобождался, но не выделялся.
Я добавляю изображение из UIImagePickerController.
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *pickedImage = (UIImage *)[info objectForKey: UIImagePickerControllerEditedImage]; if (!pickedImage) pickedImage = (UIImage *)[info objectForKey: UIImagePickerControllerOriginalImage]; if (!reviewUpload.images) reviewUpload.images = [[NSMutableArray alloc] initWithCapacity: 5]; //UIImage *thumbImage = [pickedImage copyResizedImage: CGSizeMake(120, 120)]; UIImage *thumbImage = [pickedImage copyResizedImage:CGSizeMake(120, 120) withPaddingColor: [UIColor lightGrayColor]]; ReviewUploadImage *rui = [[ReviewUploadImage alloc] init]; rui.thumb = thumbImage; [thumbImage release]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat: @"yyyyMMddHHmmssSS"]; NSDate *date = [NSDate date]; NSString *tmpFileName = [dateFormatter stringFromDate: date]; [dateFormatter release]; NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent: tmpFileName]; NSData *imageData = [[NSData alloc] initWithData: UIImageJPEGRepresentation(pickedImage, 0.90)]; [imageData writeToFile: path atomically: TRUE]; [imageData release]; rui.path = path; [reviewUpload.images addObject: rui]; debugLog(@"rui rc %i", rui.retainCount); [rui release]; [self dismissModalViewControllerAnimated:TRUE]; }
Я не думаю, что у меня есть что-то здесь не так: ReviewUpload имеет множество изображений, которые могут содержать объекты ReviewUploadImage. В реализации этих классов у меня есть только метод release, я просто освобождаю членов, которые я должен выпустить.
@interface ReviewUpload : NSObject { NSString *title; NSString *tags; NSString *text; NSInteger rating; NSMutableArray *images; NSInteger idCompany; NSInteger idProduct; } @property(nonatomic, copy) NSString *title; @property(nonatomic, copy) NSString *tags; @property(nonatomic, copy) NSString *text; @property(nonatomic, assign) NSInteger rating; @property(nonatomic, retain) NSMutableArray *images; @property(nonatomic, assign) NSInteger idCompany; @property(nonatomic, assign) NSInteger idProduct; @end
@interface ReviewUploadImage : NSObject { UIImage *thumb; NSString *path; } @property(nonatomic, retain) UIImage *thumb; @property(nonatomic, copy) NSString *path; @end
там не простой способ получить Objective-C объект из адреса ?!
UPDATE: Если я удалю одну из этих строк, я не получу ошибку. Я не знаю, что сказать, что это действительно странно.
[reviewUpload.images removeObject: self.reviewUploadImg]; [self.navigationController popViewControllerAnimated:TRUE];
UPDATE: если изображение выбрано в «didFinishPickingMediaWithInfo» отсутствует не отображается ошибка. Возможно, он должен что-то сделать с тем, как я создаю миниатюру. Вот метод, который его создает. Если у кого-нибудь есть идея, пожалуйста, помогите.
-(UIImage *) copyResizedImage:(CGSize) thumbSize withPaddingColor: (UIColor *) bgColor { CGFloat resizedProp = thumbSize.width/thumbSize.height; CGFloat imageProp = self.size.width/self.size.height; CGSize newSize; CGFloat factor; if (imageProp > resizedProp) //image is wider factor = thumbSize.width/self.size.width; else factor = thumbSize.height/self.size.height; newSize.width = self.size.width * factor; newSize.height = self.size.height * factor; NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; UIImage *resizedImage; UIGraphicsBeginImageContext(thumbSize); CGContextRef drwContextRef = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(drwContextRef, bgColor.CGColor); CGContextFillRect(drwContextRef, CGRectMake(0, 0, thumbSize.width, thumbSize.height)); CGRect imageRect = CGRectMake( (thumbSize.width - newSize.width)/2.0, (thumbSize.height - newSize.height) /2.0, newSize.width, newSize.height); [self drawInRect:imageRect]; resizedImage = UIGraphicsGetImageFromCurrentImageContext(); // this is autoreleased and i dont need it UIGraphicsEndImageContext(); [resizedImage retain]; [pool release]; return resizedImage; }
Можете ли вы поместить код, где вы инициализируете reviewUploadImg? и что такое reviewUpload? что это за объект? Это поможет лучше понять вашу проблему. –
reviewUploadImg - класс ReviewUploadImage для хранения изображения обзора для обзора (класс ReviewUpload). Пользователь может писать обзоры для компании или продукта и может прикреплять изображения к обзору, которые хранятся в reviewUpload.images. –
Почему этот вопрос так популярен? –