Ответ 1
Удалить строки:
[ProductList removeObjectAtIndex:i];
[ProductList insertObject:prod atIndex:i];
и это будет хорошо!
Я пытаюсь обновить объект в NSMutableArray.
Product *message = (Product*)[notification object];
Product *prod = nil;
for(int i = 0; i < ProductList.count; i++)
{
prod = [ProductList objectAtIndex:i];
if([message.ProductNumber isEqualToString:prod.ProductNumber])
{
prod.Status = @"NotAvaiable";
prod.Quantity = 0;
[ProductList removeObjectAtIndex:i];
[ProductList insertObject:prod atIndex:i];
break;
}
}
Есть ли лучший способ сделать это?
Удалить строки:
[ProductList removeObjectAtIndex:i];
[ProductList insertObject:prod atIndex:i];
и это будет хорошо!
Для обновления используйте
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject
Но в этом случае он не нужен, так как вы изменяете один и тот же объект.
Вы можете начать с быстрого перечисления, который быстрее и проще читать. Кроме того, вам не нужно удалять и вставлять объект, вы можете просто отредактировать его в строке. Вот так:
Product *message = (Product*)[notification object];
for(Product *prod in ProductList)
{
if([message.ProductNumber isEqualToString:prod.ProductNumber])
{
prod.Status = @"NotAvailable";
prod.Quantity = 0;
break;
}
}
(Is ProductList
объект? Если это так, он должен начинаться с буквы нижнего регистра: ProductList
. Заглавные имена для классов. Кроме того, Status
и Quantity
являются свойствами и также должны начинаться с строчная буква. Я настоятельно рекомендую вам следовать Cocoa соглашениям об именах.)
Используйте -insertObject:atIndex:
или replaceObjectAtIndex:withObject:
.
Существует два подхода
for(int i = 0; i < ProductList.count; i++) { prod = [ProductList objectAtIndex:i]; if([message.ProductNumber isEqualToString:prod.ProductNumber]) { newObj = [[Product alloc] autorelease]; newObj.Status = @"NotAvaiable"; newObj.Quantity = 0; [ProductList replaceObjectAtIndex:i withObject:newObj]; break; } }
Обновить существующий объект:
for(int i = 0; i < ProductList.count; i++)
{
prod = [ProductList objectAtIndex:i];
if([message.ProductNumber isEqualToString:prod.ProductNumber])
{
prod.Status = @"NotAvaiable";
prod.Quantity = 0;
break;
}
}