我正在使用API,他们的课程似乎不符合Core Data。
我尝试存储的课程AftershipCheckpoint
和AftershipTracking
AftershipTracking
的.h文件看起来像这样
@interface AftershipTracking : NSObject
@property (nonatomic, strong) NSString* createTime;
@property (nonatomic, strong) NSString* updateTime;
@property (nonatomic, strong) NSString* identifier;
@property (nonatomic, strong) NSString* trackingNumber;
@property (nonatomic, strong) NSString* trackingPostalCode;
@property (nonatomic, strong) NSString* trackingShipDate;
@property (nonatomic, strong) NSString* trackingAccountNumber;
@property (nonatomic, strong) NSString* slug;
@property (nonatomic) bool isActive;
@property (nonatomic, strong) NSDictionary* customFields;
@property (nonatomic, strong) NSString* customName;
@property (nonatomic, strong) NSNumber* deliveryTime;
@property (nonatomic, strong) NSString* destionationCountryCode;
@property (nonatomic, strong) NSArray* emails;
@property (nonatomic, strong) NSString* expectedDeliveryDate;
@property (nonatomic, strong) NSString* orderId;
@property (nonatomic, strong) NSString* orderIdPath;
@property (nonatomic, strong) NSString* originCountryCode;
@property (nonatomic, strong) NSString* uniqueToken;
@property (nonatomic, strong) NSNumber* shipmentPackageCount;
@property (nonatomic, strong) NSString* shipmentType;
@property (nonatomic, strong) NSNumber* shipmentWeight;
@property (nonatomic, strong) NSString* shipmentWeightUnit;
@property (nonatomic, strong) NSString* signedBy;
@property (nonatomic, strong) NSArray* smses;
@property (nonatomic, strong) NSString* source;
@property (nonatomic, strong) NSString* tag;
@property (nonatomic, strong) NSString* title;
@property (nonatomic, strong) NSNumber* trackedCount;
@property (nonatomic, strong) NSArray* checkpoints;
- (NSString *)description;
它包含一个AftershipCheckpoint
数组,所以我想我也需要配置这个类。
@interface AftershipCheckpoint : NSObject
@property (nonatomic, strong) NSDate* createTime;
@property (nonatomic, strong) NSString* slug;
@property (nonatomic, strong) NSString* checkpointTime;
@property (nonatomic, strong) NSString* city;
@property (nonatomic, strong) NSString* state;
@property (nonatomic, strong) NSString* countryCode;
@property (nonatomic, strong) NSString* countryName;
@property (nonatomic, strong) NSString* message;
@property (nonatomic, strong) NSString* tag;
@property (nonatomic, strong) NSString* zip;
- (NSString *)description;
我的应用程序有一个AftershipTracking
数组,如何使用Core Data存储数据以获取持久数据?还是有更好的选择?
答案 0 :(得分:2)
要从您的模型中删除其中一个跟踪,它将看起来像这样..
- (void)remove:(AftershipTracking *)package
{
[_packages removeObject:package];
[_delivered removeObject:package];
[_inProgress removeObject:package];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"Tracking" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDesc];
NSPredicate *pred =[NSPredicate predicateWithFormat:@"(trackingNumber = %@)", package.trackingNumber];
[request setPredicate:pred];
NSManagedObject *match = nil;
NSError *error;
NSArray *objects = [context executeFetchRequest:request error:&error];
match = objects.firstObject;
[context deleteObject:match];
[self sort];
[context save:&error];
}
答案 1 :(得分:1)
其中的所有内容似乎都准备好使用NSCoding进行持久化。首先,根据您可以将这些阵列保存到NSUserDefaults的大小,或者您可以启动Core Data Store并尝试使用它继续使用plist。一般来说,首先要确保你的逻辑是正确的,使用一个人类可读的格式(在iOS的情况下是plist),然后一旦你已经到位,切换商店使用SQLite,但你真的只需要做如果你有数千个对象要坚持下去。
使用NSUserDefaults,只要AftershipTracking
符合NSCoding,该数组就会保存在AftershipCheckpoint
列表中。
答案 2 :(得分:1)
在AftershipTracking中,
isActive
更改为NSNumber
。作为NSNumber
,它可以保存在CoreData中。checkpoints
是AftershipCheckpoint对象的数组。这可以在模型中设置为多个关系,这会将类型更改为NSSet
。当您从CoreData中检索NSSet
时,您可以将其转换为[checkpoints allObjects]
的数组。NSArray
和NSDictionary
必须是Transformable个对象。在AftershipCheckpoint中,
NSString
和NSDate
。这两个类都必须是NSManagedObjectModel
的子类。通过正常的核心数据建模选项创建它们可能是个好主意(确保导入核心数据框架)。查看核心数据的this Ray Wenderlich tutorial。