Я получаю ошибку EXC_BAD_ACCESS при попытке установить значение внутри подкласса NSManagedObject для второй раз .
Я использую зомби, но в консоли ничего не отображается.Распечатка объекта с использованием GDB Я вижу, что объект имеет один и тот же адрес памяти, оба раза я пытаюсь установить значение - хотя не уверен почему.
Ситуация :
- У меня есть представление (A), которое при сканировании QR-кода добавляет подпредставление (B), которое, в свою очередь, загружает XML, который затем сохраняется в подклассе NSManagedObject.
- Внутри подпредставления (B) я возвращаюсь назад (
removeFromSuperView
вызывается) - Назад в исходное представление (A)
- В следующий разКогда сканируется такой же QR-код, он (A) находит NSManagedObject из базы данных и присоединяет его к переменной экземпляра в новом представлении (того же типа, что и B), которое затем добавляет в качестве подпредставления дляоригинал (A).
В представлении B viewDidLoad
я всегда стараюсь установить текущую дату, чтобы отслеживать, когда пользователь «увидел» этот объект. Вот где я получаю сообщение об ошибке EXC_BAD_ACCESS :
self.currentPiece.piece_last_viewed = [[NSNumber alloc] initWithDouble:[[NSDate date] timeIntervalSince1970]];
Где self.currentPiece
- это экземпляр подклассного NSManagedObject, который был присоединен в A, когда этот объект существовал в базе данных.
Я знаю, что он где-то выпускается, но я не знаю, где, поскольку управляемые объекты сами позаботятся об этом.Ошибка возникает только во второй раз, когда я пытаюсь установить значение.
Я попытался прояснить это.Пожалуйста, скажите мне, если вы хотите, чтобы я уточнил это еще больше.Спасибо за помощь (работали над этим уже несколько часов)
ОБНОВЛЕНИЕ:
Объявление piece_last_viewed в HubPiece.h:
@interface HubPiece : NSManagedObject {
}
// ...
@property (nonatomic, retain) NSNumber *piece_last_viewed;
HubPiece.m:
@dynamic piece_last_viewed;
//...inside init method:
self.piece_last_viewed = [[NSNumber alloc] initWithDouble:[[NSDate date] timeIntervalSince1970]];
ОБНОВЛЕНИЕ 2:
Исключается не переключение подпредставлений.Затем я понял, что не сохранил свои изменения, поэтому я ввел save:
внутри подкласса NSManagedObject.Затем я впервые получил ошибку при первой попытке сохранить экземпляр объекта (который был сохранен во время сеанса приложения, но данные исчезают, если я полностью закрываю приложение и затем снова открываю его).Поэтому я подумал, что использование [context save:&error]
было бы хорошей идеей :) ... но теперь это не работает и выдает мне ошибку EXC_BAD_ACCESS.
Сам HubPiece инициализируется из другого класса HubPieceView.m
:
self.currentPiece = [[HubPiece alloc] initWithXML:pieceXML];
self.currentPiece
- это переменная класса типа HubPiece
, которая сначала объявляется в файле .h, а затем синтезируется в файле .m.
Затем внутри HubPiece.m
инициализатор выглядиткак это:
-(id)initWithXML:(TBXMLElement *)pieceXML
{
// Setup the environment for dealing with Core Data and managed objects
HenryHubAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSEntityDescription *entityHubPiece = [NSEntityDescription entityForName:@"HubPiece"
inManagedObjectContext:context];
// STORING values
self = [[HubPiece alloc] initWithEntity:entityHubPiece insertIntoManagedObjectContext:context];
// ...setting variables with normal assignment: self.var = value;
NSError *error;
// Save fails
if (![context save:&error] ){
NSLog(@" ERROR: %@", [error localizedDescription]);
}
return self;
}