背景:
- 私は在庫管理アプリで働いています。
- ユーザーはトラックに在庫を追加できます
- すでにトラックにあるアイテムを追加するとき、もう一度追加するのではなく、その数量を更新したいだけです。
- 一対一の関係です。今のところ、「トラック」は 1 つだけです。
プロセス ロジック: アイテム番号を入力したら、[アイテム] の下で探します。見つかった場合は、適切なtruckItem管理オブジェクトを作成し、それをディクショナリに保持します。格納されているすべてのtruckInventoryオブジェクトに対してコンテキスト チェックを保存する準備ができたら。アイテムが既に存在する場合は、truckItem管理オブジェクトを取得し、数量を追加して、新しく作成されたtruckItemを破棄します。保存。
問題: 保存されている truckItems と照合すると、すべての情報が読み込まれますが、item は nil に設定されます。(注、 は nil であり、 ではありません)。したがって、数量は正しい値を反映していますが、適切なアイテムがありません。
簡略化されたコード: 在庫の読み込み:
NSError *error;
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"TruckItems"];
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"item" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sort]];
loadedInventoryResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self->context sectionNameKeyPath:nil cacheName:nil];
if(![loadedInventoryResultsController performFetch:&error]) {
NSLog(@"Error! %@", [error localizedDescription]);
}
保存された在庫の簡素化されたコードに対するチェック:
for(NSString *mpn in items) {
TruckItems *item = [items objectForKey:mpn];
//This shows the right number of managedObjects, but the ones that are repeated show item = nil;
NSLog(@"Logged: %@", [loadedInventoryResultsController fetchedObjects]);
//Check to see if items are already in inventory. If they are update their quantities rather than adding them again.
for(TruckItems *loadedItem in [loadedInventoryResultsController fetchedObjects]) {
Items *storedItem = [loadedItem item]; //I am doing this just for testing: This comes back as nil. This is the problem as it comes nil
Items *scanned = [item item]; //Same here.
if([stored.manufacturerProductNumber isEqualToString:scanned.manufacturerProductNumber]) {
item.quantity = [loadedItem.quantity decimalNumberByAdding:item.quantity];
[context deleteObject:loadedItem];
}
}
}
//Save context
質問:なぜ nil に設定されているのですか? それを避ける方法は?
前もって感謝します。