Objective c 如何告诉MagicalRecord不要使用基于文件的核心数据,而是使用内存设置?

Objective c 如何告诉MagicalRecord不要使用基于文件的核心数据,而是使用内存设置?,objective-c,ios5,core-data,magicalrecord,Objective C,Ios5,Core Data,Magicalrecord,我随后进入了关于核心数据的单元测试。设置似乎很简单,只涉及一些代码的视图行 - (void)setUp; { [MagicalRecord setDefaultModelWithClass:[self class]]; [MagicalRecord setupCoreDataStackWithInMemoryStore]; } - (void)tearDown; { [MagicalRecord cleanUp]; } - (void)testSomeCalculat

我随后进入了关于核心数据的单元测试。设置似乎很简单,只涉及一些代码的视图行

- (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
问题是,例如,每次我通过调用
[MyEntity MR_numberOfEntities]
(如上所述)检查核心数据的内存设置中的实体数量时,我都会得到存储在基于文件的设置中的对象数量,这是几千个对象。这是怎么发生的?我的意思是
setUp
中的第二行表示内存中的那一行,不是吗?这种情况下,存储的对象数量应返回0

谢谢你的建议

编辑:

@卡萨德莫拉让我走上了正确的道路。下面的工作设置现在适合我

- (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

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

我想这可能是因为您没有向以前的测试用例添加清理调用,导致以前的核心数据堆栈或持久存储挂起到这个测试中

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

po [self persistentStores]

当您开始加载持久存储协调器时。如果存在现有存储,这将至少验证是否存在一些预先存在的存储。

您还可以添加以下内容,这些内容在类初始化时执行一次。这对我有用

 +(void)setUp
   {
           [MagicalRecord cleanUp];
   }

谢谢你的回复。我正在运行的测试是唯一的一个。测试的目标取决于应用程序的目标。在我的AppdDelegate中,我设置了核心数据堆栈以使用文件。这可能是在测试之前加载的,因此使用它而不是新的内存中的吗?如果是,我如何避免这种情况?谢谢你让我走上正轨。我通过调用
[MagicalRecord cleanUp]解开了这个谜团
就在
[MagicalRecord setupCoreDataStackWithInMemoryStore]之前-(void)设置中的code>。我必须删除
[MagicalRecord setDefaultModelFromClass:[self class]]。请看我对问题的编辑。哇,这本不必要……在tearDown方法中调用cleanUp就足够了。这是很奇怪的。这不是在特定的单元测试方法之间进行清理的问题。这是第一个与遗留(基于文件的)persistentStore存在问题的总体测试。这就是为什么我把
清理
放在
设置
中的原因。也许这也适用于“设置类”(我以前没想过)。是的,你也可以在Teardown类中使用cleanUp调用…如果你必须调用它两次,它似乎是一个更好的地方。。。