我想为NSArrayController子类编写一些单元测试 我首先设置了一个Core Data托管对象上下文,然后将一些实体“Asset”对象添加到核心数据中,然后设置我的阵列控制器:
@interface MYAssetArrayControllerTest : XCTestCase
...
- (void)setUp
{
[super setUp];
[self setUpManagedObjectContext];
[self setUpAssets];
[self setUpMYAssetArrayController];
}
- (void)setUpMYAssetArrayController
{
_arrayController = [[MYAssetArrayController alloc] init];
[_arrayController setManagedObjectContext:_moc];
[_arrayController setEntityName:@"Asset"];
[_arrayController setSelectsInsertedObjects:YES];
[_arrayController setAutomaticallyPreparesContent:YES];
[_arrayController fetch: self];
}
当我尝试查看排列的对象时,没有:
- (void)testGetArrangedObjects
{
id myArrangedObjects;
myArrangedObjects = [_arrayController arrangedObjects];
...
}
myArrangedObjects总是空的...
我如何设置我的NSArrayController以便能够从中检索对象?
答案 0 :(得分:1)
当我不向我的阵列控制器发送fetch:
但是fetchWithRequest:merge:error:
时,我发现它有效。我的原始代码:
- (void)setUpMYAssetArrayController
{
_arrayController = [[MYAssetArrayController alloc] init];
[_arrayController setManagedObjectContext:_moc];
[_arrayController setEntityName:@"Asset"];
[_arrayController setSelectsInsertedObjects:YES];
[_arrayController setAutomaticallyPreparesContent:YES];
[_arrayController fetch: self];
}
变为:
- (void)setUpMYAssetArrayController
{
_arrayController = [[MYAssetArrayController alloc] init];
[_arrayController setManagedObjectContext:_moc];
[_arrayController setEntityName:@"Asset"];
[_arrayController setSelectsInsertedObjects:YES];
[_arrayController setAutomaticallyPreparesContent:YES];
NSError *error = nil;
BOOL ok = [_arrayController fetchWithRequest:nil merge:NO error:&error];
}
或许-fetch
的以下评论可能是一个解释?
从OS X v10.4开始,此方法的结果将推迟到 runloop的下一次迭代,以便出现错误 机制可以作为一张表提供反馈。