1

背景:

  • 私は在庫管理アプリで働いています。
  • ユーザーはトラックに在庫を追加できます
  • すでにトラックにあるアイテムを追加するとき、もう一度追加するのではなく、その数量を更新したいだけです。
  • 一対一の関係です。今のところ、「トラック」は 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 に設定されているのですか? それを避ける方法は?

前もって感謝します。

4

1 に答える 1

1

見つかった場合は、適切な truckItem 管理オブジェクトを作成し、それをディクショナリに保持します

「適切な」truckItem オブジェクトは、item関係に適切なItemsオブジェクトが取り込まれているオブジェクトのみである必要があります。item1 対 1 の関係があるため、これにより他のtruckItemオブジェクトから値が削除されます。

数量を追加し、新しく作成された truckItem を破棄します。

これにより、有効なリレーションシップを持つオブジェクトのみが削除truckItemされ、アイテムに戻されます。

. truckItem_ Items_ onTruck_ . その時点で、新しいアイテムを作成するか、数量を更新します。

于 2013-03-13T07:32:36.817 に答える