存储自定义类iOS 8核心数据

时间:2014-12-23 23:20:28

标签: ios objective-c core-data nsobject

我正在使用API​​,他们的课程似乎不符合Core Data。

我尝试存储的课程AftershipCheckpointAftershipTracking

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存储数据以获取持久数据?还是有更好的选择?

3 个答案:

答案 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]的数组。
  • 其他NSArrayNSDictionary必须是Transformable个对象。

在AftershipCheckpoint中,

  • 此类很好,因为它是一堆NSStringNSDate

这两个类都必须是NSManagedObjectModel的子类。通过正常的核心数据建模选项创建它们可能是个好主意(确保导入核心数据框架)。查看核心数据的this Ray Wenderlich tutorial