我使用方法-setupCoreDataStackWithStoreNamed:
通过MagicalRecord设置了核心数据堆栈。
我用一些属性创建了DataModel和一个名为 DriverOrder 的ManagedObject,并像这样自动创建了ManagedObject的SubClass
稍后我写了一些代码来创建一个对象并尝试访问ViewController类中的对象。
这样的代码:
- (void)testCoreData {
NSManagedObjectContext *context = [NSManagedObjectContext MR_context];
DriverOrder *order = [DriverOrder MR_createEntityInContext:context];
order.driverId = @"11";
order.orderID = @(2015);
DriverOrder *order2 = [DriverOrder MR_createEntityInContext:context];
order2.driverId = @"15";
order2.orderID = @(2016);
[context MR_saveOnlySelfAndWait];
NSArray *resultArr = [self fetchAllOrder];
for (DriverOrder *theorder in resultArr) {
DDLog(@"%@",theorder);
}
}
- (NSArray *)fetchAllOrder {
NSArray *orders = [DriverOrder MR_findAllSortedBy:@"orderID" ascending:YES];
return orders;
}
更新
关于NSManagedObject的子类,DriverOrder是由Xcode 自动生成的,我没有对这个类做任何事情,看起来像这样:
//
// DriverOrder.h
//
//
// Created by lynulzy on 10/21/15.
//
//
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
NS_ASSUME_NONNULL_BEGIN
@interface DriverOrder : NSManagedObject
// Insert code here to declare functionality of your managed object subclass
@end
NS_ASSUME_NONNULL_END
#import "DriverOrder+CoreDataProperties.h"
//
// DriverOrder+CoreDataProperties.h
//
//
// Created by lynulzy on 10/21/15.
//
//
// Choose "Create NSManagedObject Subclass…" from the Core Data editor menu
// to delete and recreate this implementation file for your updated model.
//
#import "DriverOrder.h"
NS_ASSUME_NONNULL_BEGIN
@interface DriverOrder (CoreDataProperties)
@property (nullable, nonatomic, retain) NSNumber *orderID;
@property (nullable, nonatomic, retain) NSString *driverId;
@end
NS_ASSUME_NONNULL_END
当我构建并运行应用程序时,会出现问题:
答案 0 :(得分:0)
您很可能会遇到这种情况,因为您已在模型中添加了新字段,而CoreData无法自动迁移数据。
当您开发应用并经常更改模型时,您几乎可以忽略迁移并清除现有数据。
我个人使用这样的东西:
[MagicalRecord setupAutoMigratingCoreDataStack];
#if DEBUG
// Drop database on model mismatch during development
[MagicalRecord setShouldDeleteStoreOnModelMismatch:YES];
#endif
MagicalRecord会自动为您的数据库制作网址。如果您使用单个持久性存储,那么要获取SQL数据库的路径,您可以使用以下内容(在使用MagicalRecord初始化CoreData之后):
NSLog(@"Persistent store URL: %@", [[NSPersistentStore MR_defaultPersistentStore] URL]);