Я работаю над последними штрихами пользовательского патча для Quartz Composer. На данный момент у меня почти все удалено из патча, и он выдает сообщение BAD ACCESS, когда я пытаюсь NSLog значение NSDictionary, которое представляет собой ivar, и оно отлично работало в последнем выполнении, когда я его назначил. *
Мой код выглядит так:
- (BOOL) startExecution:(id<QCPlugInContext>)context
{
lastBoutData = [[NSDictionary alloc] init ];
return YES;
}
- (BOOL) execute:(id<QCPlugInContext>)context atTime:(NSTimeInterval)time withArguments:(NSDictionary*)arguments
{
NSLog(@"self.inputBoutData: %@", self.inputBoutData);
NSLog(@"lastBoutData: %@", lastBoutData);
// have new data, put it on the output
self.lastBoutData = [NSDictionary dictionaryWithDictionary:self.inputBoutData];
NSLog(@"assigned: %@", lastBoutData);
return YES;
}
Я вижу, что журнал показывает, что все три строки NSLog работают отлично, пока self.inputBoutData не введет данные. Затем я вижу, что self.inputBoutData успешно скопирован в lastBoutData в последней строке цикла NSLog.
При следующем запуске execute: atTime: withArguments :, self.inputBoutData по-прежнему заполнен, но lastBoutData снова пусто !!! Я не вижу, как это может произойти. Затем он запускает еще один цикл, как и последний, и успешно копирует self.inputBoutData в lastBoutData и снова регистрируется. В следующий раз я получаю BAD ACCESS как раз перед вторым оператором NSLog.
Я получал некоторые сообщения об ошибках, в которых говорилось, что lastBoutData не является NSDictionary, поэтому в отчаянии я добавил [lastBoutData retain], и он не вылетает. Я не выпускаю этот ивар, поэтому я не уверен, почему я должен сохранить его. Я делаю очень похожие вещи с другими иварами во многих других патчах без проблем. Чего мне не хватать? Почему эта вещь высвобождает меня или это даже то, что происходит?