objective-c - 如何对 NSArrayController (子类)进行单元测试?

标签 objective-c cocoa core-data nsarraycontroller xctest

我想为我的 NSArrayController 子类编写一些单元测试。
我首先设置一个 Core Data 托管对象上下文,然后将实体“Asset”的一些对象添加到核心数据,然后设置我的数组 Controller :

@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 才能从中检索对象?

最佳答案

当我不发送 fetch: 而是 fetchWithRequest:merge:error: 到我的数组 Controller 时,我发现它有效。我的原始代码:

- (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 的注释可能是一个解释?

Beginning with OS X v10.4 the result of this method is deferred until the next iteration of the runloop so that the error presentation mechanism can provide feedback as a sheet.

关于objective-c - 如何对 NSArrayController (子类)进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25312583/

相关文章:

ios - 获取 ImageView 和触摸之间的角度

iOS 7.1滑动解锁文字动画

ios - SQLite3多线程

php - 服务器上传多张图片少一张

cocoa - 即使 CGPathRef 已释放,CAShapeLayer 如何继续在路径 (CGPathRef) 上绘制?

ios - 具有多个 View Controller 的 Swift 3 中的核心数据实现

Objective-C,授权无法执行功能

cocoa - NSView边框颜色

ios - 如何在 Swift 中覆盖核心数据属性

ios - CoreData 总和性能