2015-06-18 5 views
1

Я новичок в iOS. Я делаю приложение, в котором я получаю данные из Parse back-end, все работают нормально. Мое заявление на заказ и доставку еды. У меня есть тележка, где я добавляю предметы. Если продукт уже находится в корзине, но добавил его снова, он должен увеличить количество и не создать еще один в корзине. Я попытался реализовать его с помощью цикла, но он не работает должным образом. Но продукт добавляется вместо увеличения их количества. Я очень надеюсь на вашу помощь.Проблемы с петлей массива

+ (void)addItem:(PFObject *)item { 

Cart *cart = [Cart sharedInstance]; 

for (NSUInteger i = 0; i < [cart.items count]; i++) { 
    if ([item valueForKey:@"objectId"] == [cart.items[i] valueForKey:@"objectId"]) { 

     NSDecimalNumber *sumQtyNew = [NSDecimalNumber decimalNumberWithMantissa:1 exponent:0 isNegative:NO]; 
     NSDecimalNumber *sumQty = [NSDecimalNumber decimalNumberWithMantissa:1 exponent:0 isNegative:NO]; 

     sumQtyNew = [item valueForKey:@"qty"]; 
     sumQty = [cart.items[i] valueForKey:@"qty"]; 
     sumQty = [sumQty decimalNumberByAdding:sumQtyNew]; 

     [[cart.items[i] valueForKey:@"objectId"] setObject:sumQty forKey:@"qty"]; 

    } 
    else { 
     [cart.items addObject:item]; 
    } 
} 

NSDecimalNumber *plus = [[NSDecimalNumber alloc]initWithString:[item objectForKey:@"price"]]; 
cart.totalPrice = [cart.totalPrice decimalNumberByAdding:plus]; 

}

+0

Вы уверены, что приведенный выше код работает? Логика, по-видимому, заключается в том, что каждый раз, когда нет никакого совпадения с существующим элементом в корзине, он добавляет новый элемент. Поэтому, если у вас есть 15 предметов в корзине, он добавит новый предмет 15 раз. Что касается того, почему это не соответствует, кажется, что оператор if всегда вычисляет false. Попробуйте изменить '[item valueForKey: @" objectId "]' to '[[item valueForKey: @" objectId "] integerValue]', а также другое значение valueForKey' – dstudeba

ответ

0

Если вы должны были использовать cart.items в NSMutalbeArray, вот еще один ответ

+ (void)addItem:(PFObject *)item { 
    Cart *cart = [Cart sharedInstance]; 
    NSMutableArray * cartItems = cart.items 
    NSString *objectId = [item valueForKey:@"objectId"]; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"objectId = %@", objectId]; 
    PFObject *existingItem = [[cartItems filteredArrayUsingPredicate:predicate] firstObject]; 

    if (existingItem == nil){ 
     [cartItems addObject:item]; 
    } else { 
     int sumQty = [[existingItem valueForKey:@"qty"] intValue] + [[item valueForKey:@"qty"] intValue]; 
     [existingItem setObject:[NSNumber numberWithInt:sumQty] forKey:@"qty"]; 
    } 
} 
+0

Да, это то, что мне нужно !!! Прекрасно работает !!! ** Махмуд Адам ** Большое спасибо! –

0

я хотел бы использовать NSMutableDictionary в магазин корзину предметов, ключ является objectId и значением является Item сама

+ (void)addItem:(PFObject *)item { 
    Cart *cart = [Cart sharedInstance]; 
    NSMutableDictionary * cartItems = cart.items 
    NSString *objectId = [item valueForKey:@"objectId"]; 
    if ([cartItems objectForKey:objectId] == nil){ 
     [cartItems setObject:item forKey:objectId] 
    } else { 
     PFObject *oldItem = [cartItems objectForKey:objectId]; 
     int sumQty = [[oldItem valueForKey:@"qty"] intValue] + [[item valueForKey:@"qty"] intValue]; 
     [cartItems setObject:[NSNumber numberWithInt:sumQty] forKey:@"qty"] 
    } 
+0

Как вы сказали. Когда я добавляю продукт в корзину, ошибка. http://cs627622.vk.me/v627622607/7ad9/Mp-UEsM-VNM.jpg (( –

+0

Вы не поменяли cart.items на NSMutabledictionary, он по-прежнему NSMutableArray –

+0

Я не могу найти способ преобразования NSMutableArray в NSMutableDictionary ... вы могли бы предложить? –

Смежные вопросы