MagicalRecord无法访问ManagedObject

时间:2015-10-21 10:33:20

标签: ios objective-c magicalrecord

我使用方法-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

当我构建并运行应用程序时,会出现问题:

  1. * .sqlite的路径是什么?
  2. 当我尝试获取已获取对象的属性时,调试日志看起来有问题 并使用getter方法访问调试日志,如下所示:

1 个答案:

答案 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]);