Я хочу написать несколько модульных тестов для своего подкласса 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, чтобы иметь возможность извлекать из него объекты?
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, результат этого метода откладывается до следующей итерации цикла выполнения, чтобы механизм представления ошибок мог предоставить обратную связь в виде листа.
Похожие вопросы
Новые вопросы
objective-c
Этот тег следует использовать только для вопросов, касающихся функций Objective-C или зависящих от кода на языке. Теги [cocoa] и [cocoa-touch] следует использовать, чтобы узнать о фреймворках или классах Apple. Используйте связанные теги [ios], [macos], [apple-watch] и [tvos] для проблем, характерных для этих платформ.