NSPredicateでフィルタリングした後の元のNSMutableArrayを更新する

私は最近、iOSプラットフォーム用のプログラミングを始めましたが、今は何かをする方法を理解する助けが必要です。

  • 私のアプリケーションでは、いくつかのJSONデータを取得し、このデータをオブジェクトとしてオブジェクトに格納します。
  • この配列は自分のPLISTファイル(docsディレクトリ内)に書き込まれます

ユーザーが同期操作を開始すると、次のようになります。I:

  • PLISTからデータを取得する
  • PLISTから来たArray内の特定のオブジェクトのタイムスタンプを取得する
  • 新しいJSONリクエストでタイムスタンプを使用する(新しいデータ用)

ここまでは順調ですね。

Now for my (current) problem -> After receiving the new data
(JSON req) I wish to update the timestamp of this ‘certain’ object
in the array (and write this to the Plist).

NSPredicateを使用して、メイン配列( stampArr
)内の適切なデータセットを見つけることができました。

NSString *documentsDir = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents"];
NSString *plistPath = [documentsDir stringByAppendingPathComponent:@"stamps.plist"];

NSMutableArray *stampArr = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];

NSPredicate *filter = [NSPredicate predicateWithFormat:@"eventid = 1"];
NSMutableArray *filteredStampArr = [stampArr filteredArrayUsingPredicate:filter];

しかし、今度は filteredStampArr
を更新した後、フィルターを適用した配列のデータでメイン配列を更新したいと思います。

言い換えれば、配列のオブジェクトを新しい ‘タイムスタンプ’(オブジェクトのフィールド)で更新する必要があります。

私はもちろん、[stampArr addObject:[filteredStampArr
copy]]のようなものをfilterd配列を変更した後に使用することもできますが、それは情報の複製を作成するだけです。私は元のオブジェクトを上書きしたい。

どういうわけか(私は思う)私はメイン配列のデータを直接変更できるように元の配列のデータの位置を教えてくれる
‘ポインタ’が必要ですか?

(私の質問がはっきりしていることを願っています。

ベストアンサー

アイテムを取得し、 stampArr のインデックスを見つけて
newItem に置き換えます。

NSArray *filteredStampArr = [stampArr filteredArrayUsingPredicate:filter];
id item = [filteredStampArr objectAtIndex:0];//id because the type of the item is not known

NSUInteger itemIndex = [stampArr indexOfObject:item];

[stampArr replaceObjectAtIndex:itemIndex withObject:newItem];

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です