0

こんにちは、Plist NSMutableArray に文字列を追加する IBAction を持つ 1 つの viewController があります。

この Plist は、tableView である別の viewController に読み込まれます。Plist 配列からのこの文字列は、カスタム セルの textField に文字列 "1" (引用符なし) を設定します。これは基本的に、ユーザーが製品をバスケットに追加するバスケット システムです。この場合、1 つの文字列が数量テキスト フィールドに入力される数量配列に追加されます。これらの数量のテキストフィールドはバスケットビューに動的に追加されるため、多くの場合、文字列「1」を含むテキストフィールドを含む多くの行が表示されます。

今私が抱えている問題は、製品をバスケットに追加するボタンが押されたときに、alertView に別のボタンがあり、製品を plist から削除することです。問題は、このような文字列を追加することです

NSString *string = @"1";

    [enteredQty2 addObject:string];
    NSArray *paths4 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory4 = [paths4 objectAtIndex:0];
    NSString *path4 = [documentsDirectory4 stringByAppendingPathComponent:@"qty.plist"];
    [enteredQty2 writeToFile:path4 atomically:YES];

このように文字列を削除します

NSString *string = @"1";

    [enteredQty2 removeObject:string];
    NSArray *paths4 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory4 = [paths4 objectAtIndex:0];
    NSString *path4 = [documentsDirectory4 stringByAppendingPathComponent:@"qty.plist"];
    [enteredQty2 writeToFile:path4 atomically:YES];

私が抱えている問題は、バスケットにいくつかのアイテムを追加した場合、最初はすべてのアイテムの数量文字列が「1」であることです。オブジェクトを削除すると、問題の選択した製品だけでなく、すべての qtyTextFields から「1」が削除されます。そしてもちろん、QtyTextFields はユーザーが望む QTY に基づいて変化するため、配列から "1" を削除すると、QTY "12" は効果がないと言えます。

選択したタグを使用してアイテムを追加し、削除するときに、何らかの方法で文字列「1」にタグを付ける必要がある最善の方法がわかりません。もちろん、これらのタグは動的で一意である必要がありますか?

どんな助けでも本当に感謝しています

4

2 に答える 2

0

さて、NSStringが非常に短い同一の文字列をキャッシュし、2回作成しても同じオブジェクトを返すという問題が発生しました。次に、removeObjectを呼び出すと、同じオブジェクトの複数のコピーが検出されるため、それらをすべて削除します。

これはあなたのために働くはずです:

// Returns the lowest index whose corresponding array value is equal to a given object
NSInteger index = [enteredQty2 indexOfObject:string];

// delete the object at index
if (index != NSNotFound) {
    [enteredQty2 removeObjectAtIndex:index];
}
于 2012-05-29T21:36:22.863 に答える
0

配列には、おそらくNSDictionaryの代わりにオブジェクトが含まれているはずですNSString。下のようなものではないでしょうか?

NSDictionary *item = [NSDictionary dictionaryWithObjectsAndKeys:
                                            [NSNumber numberWithInt:1], @"quantity",
                                            @"yourUniqueProductId", @"id",
                                            @"My Cool Product", @"title", nil];

次に、その項目を配列に追加できます。

[enteredQty2 addObject:item];

アイテムを削除するには、配列をループできます。

for (NSDictionary *item in enteredQty2) {
        if ([[item objectForKey:@"id"] isEqualToString:@"yourUniqueProductId"]) {
                [enteredQty2 removeObject:item];
                break;
        }
}
于 2012-05-29T20:34:32.537 に答える