わかりました。非常によく似た2つのデータセットを使用していますが、同時に、これらのデータセットは両方ともオブジェクト内のグローバルNSMutableArrayです。
data_set_one = [[NSMutableArray alloc] init];
data_set_two = [[NSMutableArray alloc] init];
2つの新しいNSMutableArrayがロードされ、古い既存のデータに追加する必要があります。これらのアレイもグローバルです。
xml_dataset_one = [[NSMutableArray alloc] init];
xml_dataset_two = [[NSMutableArray alloc] init];
コードの重複を減らすために(そしてこれらのデータセットは非常に似ているため)、両方の配列のデータ結合プロセスを処理するために、クラス内にvoidメソッドを作成しました。
-(void)constructData:(NSMutableArray *)data fromDownloadArray:(NSMutableArray *)down withMatchSelector:(NSString *)sel_str
今、私はオブジェクト指向プログラミングについて十分に理解しているので、データ内のグローバル配列を使用してメソッドを呼び出すとしたら...
[self constructData:data_set_one fromDownloadArray:xml_dataset_one withMatchSelector:@"id"];
次に、グローバルNSMutableArrays(data_set_one)は、メソッド内の「配列」に発生する変更を反映します。残念ながら、これは当てはまりません。data_set_oneは、メソッド外の変更(例:配列内の新しいオブジェクト)を反映しません。
これが問題のコードスニペットです
// data_set_one is empty
// xml_dataset_one has a few objects
[constructData:(NSMutableArray *)data_set_one fromDownloadArray:(NSMutableArray *)xml_dataset_one withMatchSelector:(NSString *)@"id"];
// data_set_one should now be xml_dataset_one, but when echoed to screen, it appears to remain empty
そして、ここにメソッドのコードの要点があります。どんな助けでもありがたいです。
-(void)constructData:(NSMutableArray *)data fromDownloadArray:(NSMutableArray *)down withMatchSelector:(NSString *)sel_str {
if ([data count] == 0) {
data = down; // set data equal to downloaded data
} else if ([down count] == 0) {
// download yields no results, do nothing
} else {
// combine the two arrays here
}
}
このプロジェクトはARC対応ではありません。
助けてくれてありがとう!ロブ