Я работаю над последними штрихами пользовательского патча для Quartz Composer. На данный момент у меня почти все удалено из патча, и он вылетает, сообщая мне НЕДОСТУПНЫЙ ДОСТУП, когда я пытаюсь 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 и снова регистрируется. В следующий раз я получаю ПЛОХОЙ ДОСТУП прямо перед вторым оператором NSLog.
Я получал некоторые сообщения об ошибках, в которых говорилось, что lastBoutData не является NSDictionary, поэтому в отчаянии я добавил [lastBoutData сохранить], и он не падает. Я не выпускаю этот ивар, поэтому я не уверен, почему я должен его сохранить. Я делаю очень похожие вещи с другими иварами во многих других патчах без проблем. Что я мог упустить? Почему эта штука высвобождается на мне, или это вообще то, что происходит?