В моя основен модел на данни имам два обекта:
- InventoryItem
- InventoryAction
InventoryItem има следните атрибути:
Атрибути:
@property (nonatomic, retain) NSNumber * allowsActions;
@property (nonatomic, retain) NSNumber * assetID;
@property (nonatomic, retain) NSNumber * inventoryObjectID;
@property (nonatomic, retain) NSString * objectDescription;
@property (nonatomic, retain) NSNumber * quantity;
@property (nonatomic, retain) NSNumber * retired;
@property (nonatomic, retain) NSString * serialNumber;
Връзки:
@property (nonatomic, retain) NSSet *action;
InventoryAction има следните атрибути Атрибути:
@property (nonatomic, retain) NSDate * actionDate;
@property (nonatomic, retain) NSNumber * actionID;
@property (nonatomic, retain) NSString * actionLongValue;
@property (nonatomic, retain) NSString * actionShortValue;
@property (nonatomic, retain) NSString * notes;
@property (nonatomic, retain) NSNumber * userActionID;
@property (nonatomic, retain) NSString * userAuthorizingAction;
@property (nonatomic, retain) NSString * userPerformingAction;
@property (nonatomic, retain) NSNumber * userPerformingActionExt;
@property (nonatomic, retain) NSNumber * inventoryObjectID;
Връзки
@property (nonatomic, retain) InventoryItem *object;
Сега, когато имате цялата тази информация, ще ви кажа, че всички стойности, които се съхраняват в модела CoreData, идват от уеб услуга във формат JSON. Всички стойности се съхраняват правилно.
Проблемът, който имам, е, че когато извличам данните от CoreData, той връща само стойности, които са уникални.
Например: Последният InventoryItem има 6 действия, свързани с него:
- "",
- "",
- "изглежда доста лигаво",
- "О, боже....защо бихте направили това с неодушевен предмет, който ви е гаден",
- "сега всичко е лигаво",
- "всичко изглежда добре"
Тъй като 1 и 2 имат една и съща стойност, той извлича само стойност 1, 3, 4, 5 и 6.
Ето кода, който използвам за извличане на данните:
- (void)loadDetails
{
_fetchRequest = [[NSFetchRequest alloc] init];
_entity = [NSEntityDescription entityForName:@"InventoryObject" inManagedObjectContext:[self managedObjectContext]];
_sort = [NSSortDescriptor sortDescriptorWithKey:@"inventoryObjectID" ascending:YES];
_sortDescriptors = [[NSArray alloc]initWithObjects:_sort, nil];
[_fetchRequest setEntity:_entity];
[_fetchRequest setSortDescriptors:_sortDescriptors];
NSError *error;
_fetchedObjects = [[self managedObjectContext] executeFetchRequest:_fetchRequest error:&error];
for (InventoryItem *inventoryItem in _fetchedObjects) {
NSLog(@"Object Description: %@", [inventoryItem valueForKey:@"objectDescription"]);
NSLog(@"Object ID: %@", [inventoryItem valueForKey:@"inventoryObjectID"]);
InventoryAction *action = (InventoryAction *)inventoryItem.action;
NSLog(@"Action Long Value: %@", [action valueForKey:@"actionLongValue"]);
NSLog(@"Notes: %@", [action valueForKey:@"notes"]);
}
}
Ето връщането на JSON:
[{"MediaInventoryObjectsId":1,"AssetId":15,"Quantity":1,"SerialNumber":"R45DFL5","Description":"Test Camera 1","AllowActions":true,"Retired":false,"Actions":[{"MediaInventoryActionsId":3,"MediaInventoryObjectsId":1,"UserPerformingActionExt":4444,"UserActionId":1,"ActionDate":"2014-05-19T15:31:45.6","UserPerformingAction":"myersb","UserAuthorizingAction":"mccroskeyl","Notes":null,"ActionShortValue":"OUT","ActionLongValue":"Check Out"},{"MediaInventoryActionsId":4,"MediaInventoryObjectsId":1,"UserPerformingActionExt":4444,"UserActionId":2,"ActionDate":"2014-05-19T15:31:45.6","UserPerformingAction":"myersb","UserAuthorizingAction":"mccroskeyl","Notes":"everything looks good","ActionShortValue":"IN","ActionLongValue":"Check In"}]},{"MediaInventoryObjectsId":2,"AssetId":15,"Quantity":2,"SerialNumber":"IDKMYBFFJILL","Description":"Vanilla Ice Cream","AllowActions":true,"Retired":false,"Actions":[]},{"MediaInventoryObjectsId":3,"AssetId":15,"Quantity":1,"SerialNumber":"R2D23P0","Description":"Droid Bee Box","AllowActions":true,"Retired":false,"Actions":[{"MediaInventoryActionsId":5,"MediaInventoryObjectsId":3,"UserPerformingActionExt":4444,"UserActionId":1,"ActionDate":"2014-05-20T14:48:29.53","UserPerformingAction":"myersb","UserAuthorizingAction":"mccroskeyl","Notes":null,"ActionShortValue":"OUT","ActionLongValue":"Check Out"},{"MediaInventoryActionsId":6,"MediaInventoryObjectsId":3,"UserPerformingActionExt":4444,"UserActionId":2,"ActionDate":"2014-05-20T14:48:29.58","UserPerformingAction":"myersb","UserAuthorizingAction":"mccroskeyl","Notes":"everything looks good","ActionShortValue":"IN","ActionLongValue":"Check In"},{"MediaInventoryActionsId":7,"MediaInventoryObjectsId":3,"UserPerformingActionExt":5555,"UserActionId":1,"ActionDate":"2014-05-20T14:48:29.6","UserPerformingAction":"farmer","UserAuthorizingAction":"mccroskeyl","Notes":null,"ActionShortValue":"OUT","ActionLongValue":"Check Out"},{"MediaInventoryActionsId":8,"MediaInventoryObjectsId":3,"UserPerformingActionExt":5555,"UserActionId":2,"ActionDate":"2014-05-20T14:48:29.6","UserPerformingAction":"farmer","UserAuthorizingAction":"mccroskeyl","Notes":"its all slimy now","ActionShortValue":"IN","ActionLongValue":"Check In"},{"MediaInventoryActionsId":9,"MediaInventoryObjectsId":3,"UserPerformingActionExt":6666,"UserActionId":1,"ActionDate":"2014-05-20T14:48:29.61","UserPerformingAction":"intern1","UserAuthorizingAction":"mccroskeyl","Notes":"it looks kinda slimy","ActionShortValue":"OUT","ActionLongValue":"Check Out"},{"MediaInventoryActionsId":10,"MediaInventoryObjectsId":3,"UserPerformingActionExt":6666,"UserActionId":2,"ActionDate":"2014-05-20T14:48:29.62","UserPerformingAction":"intern1","UserAuthorizingAction":"mccroskeyl","Notes":"oh god....why would you do that to an inanimate object you sicko","ActionShortValue":"IN","ActionLongValue":"Check In"}]}]
Четох някъде, че NSSet вероятно връща само уникални записи. Вярно ли е това и ако е така какво би било решението, тъй като връзката: действие е NSSet?