0

嗨,我有一个带有 IBAction 的 viewController,可以将字符串添加到 Plist NSMutableArray。

然后将这个 Plist 读入另一个 viewController,它是一个 tableView。Plist 数组中的此字符串使用字符串“1”(不带引号)填充自定义单元格中的文本字段。这基本上是一个购物篮系统,在这种情况下,用户将产品添加到购物篮中,将 1 字符串添加到填充 qty 文本字段的 qty 数组。这些 qty 文本字段被动态添加到购物篮视图中,因此在很多情况下,我会有很多行包含其中包含字符串“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 会根据用户想要的数量而变化,因此从数组中删除“1”,假设数量“12”将无效。

我不确定最好的方法是什么,当我添加它并使用选定标签删除项目时,我应该以某种方式标记字符串“1”。当然,这些标签必须是动态的和唯一的?

任何帮助都非常感谢

4

2 回答 2

0

Your array should probably contain NSDictionary objects instead of NSString. Perhaps something like below?

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

Then you could add that item to the array:

[enteredQty2 addObject:item];

To delete an item, you could loop through the array:

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

好吧,您遇到了一个问题,即 NSString 缓存了非常短的相同字符串,并且即使您创建了两次也会返回相同的对象。然后,当您调用 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 回答