現在、私のアプリケーションには、データの配列を出力するプロデューサーがあります。そのプロデューサーからの出力は、(XIB ファイルの「バインディング」を使用して) ウィンドウのテーブル ビューにバインドされます。プロデューサーがデータを吐き出し、それがウィンドウに表示されます。すべて問題ありません。
表示されているデータを変更する必要があることを除いて。プロデューサーはサードパーティのアプリなので、直接変更することはできません。そのため、2 つの間に位置するフィルター オブジェクトを作成する必要があります。
作成したオブジェクトは次のようになります。
@interface testFilter: NSObject {
id output;
}
-(void)setInput:(id)s;
@end
プロデューサーからの出力が入力に送られるようにバインディングを変更しました。
[myFilter bind:@"input" toObject:producer withKeyPath:@"output" options:0];
私の実装は次のようになります。
-(id)init
{
self = [super init];
output = nil;
return self;
}
- (void)setInput:(id)newInput
{
int nEntries = (int)[newInput count];
id copiedArray = [NSMutableArray arrayWithCapacity:3];
for (id entry in newInput)
{
id copiedEntry = [entry mutableCopy];
// blah blah make some changes to copiedEntry
[copiedArray addObject:copiedEntry];
[copiedEntry release]; // I'm done with it, copiedArray added his own retain
}
[self setValue:copiedArray forKey:@"output"];
[copiedArray release]; // I'm done with it, setValue/output added a retain
}
しかし、これはエラーでクラッシュしています:
「malloc: *** オブジェクト 0x108e00870 のエラー: 解放されるポインターが割り当てられませんでした」
...[copiedArray release]
行を削除するまで。
送るべきだと思うのは間違ってい[copiedArray release]
ますか?
他に何を確認できますか / このような問題をデバッグするための推奨される方法は何ですか?