如何告诉MagicalRecord不使用基于文件的Core Data而是使用内存设置?

Auf*_*ind 9 core-data objective-c ios5 magicalrecord

我按照这篇伟大的文章进入了关于核心数据的单元测试.设置看起来很简单,只涉及一些视图行代码.

- (void)setUp;
{
    [MagicalRecord setDefaultModelWithClass:[self class]];
    [MagicalRecord setupCoreDataStackWithInMemoryStore];
}

- (void)tearDown;
{
    [MagicalRecord cleanUp];
}

- (void)testSomeCalculationOnMyEntity;
{
    NSNumber *count = [MyEntity MR_numberOfEntities];
    // STAssert([testEntity customCalculation] == expectedValue, @"expected a good calculation");
}

@end
Run Code Online (Sandbox Code Playgroud)

问题是,每次我通过调用(如上所述)检查内核设置的核心数据中的实体数量[MyEntity MR_numberOfEntities],我得到的对象数量,存储在基于文件的设置中,这是一个几千个对象.这是怎么发生的?我的意思是第二行setUp表示内存中的一行,不是吗?这种情况应该返回0作为存储的对象数量.

谢谢你的任何建议!

编辑:

@casademora让我走上正轨.以下工作设置现在对我来说很好.

- (void)setUp;
{
    [MagicalRecord cleanUp]; // This solved the mystery.

    // I don't now why I had to remove this line, though.
    // [MagicalRecord setDefaultModelWithClass:[self class]];

    [MagicalRecord setupCoreDataStackWithInMemoryStore];
}

- (void)tearDown;
{
    [MagicalRecord cleanUp];
}

- (void)testSomeCalculationOnMyEntity;
{
    NSNumber *count = [MyEntity MR_numberOfEntities];
    // STAssert([testEntity customCalculation] == expectedValue, @"expected a good calculation");
}

@end
Run Code Online (Sandbox Code Playgroud)

cas*_*ora 1

此处用于设置 Core Data 的方法不应加载基于文件的存储。如果您使用调试器进入它,您应该看到它最终使用 NSInMemoryStore 类型初始化持久存储协调器。

我猜测为什么会发生这种情况,可能是因为您没有向以前的测试用例添加 cleanUp 调用,导致以前的核心数据堆栈或持久存储在该测试中徘徊。

这是我一直用来对核心数据进行单元测试的确切代码设置,并且它从未为我加载意外的持久存储。当您调试该方法时,请确保运行以下命令:

po [self persistentStores]
Run Code Online (Sandbox Code Playgroud)

当您开始加载持久性存储协调器时。如果有现有商店,这至少会验证周围是否有一些现有商店。