Почему мой массив заполняется только после повторного входа в представление? - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь заполнить array данными, используя этот код:

tmp = [[[InternalContactsHandler sharedBuffer] contacts] sortedArrayUsingSelector:NSSelectorFromString(@"nameOfContactCompare:")];

Чтобы проверить, был ли он заполнен, я установил count для него:

NSLog(@"my code: ?%lu", (unsigned long)tmp.count);

Хотя возвращает 0. Но если я введу другой view, а затем вернусь к исходному виду, NSLog отобразит счетчик 49, указывающий, что он заполнен.

Я думал, что это проблема с synchronization, поэтому я добавил block, который, я полагаю, похож на swifts completion-handler. Вот так:

- (void)myFunc:(void(^)(void))callback {
    tmp = [[[InternalContactsHandler sharedBuffer] contacts] sortedArrayUsingSelector:NSSelectorFromString(@"nameOfContactCompare:")];
    callback();
}

И в viewDidLoad:

[self myFunc:^ {
    NSLog(@"my code: ?%lu", (unsigned long)tmp.count);
}];

Но все же та же проблема сохраняется. Я должен отметить, что код используется в другом месте в проекте с большим успехом, массив мгновенно заполняется. Есть мысли?

ОБНОВЛЕНИЕ Я перешел в tmp = [[[InternalContactsHandler sharedBuffer] contacts] в режиме отладки как старого, так и нового нерабочего кода. Они следуют по тому же пути, здесь:

dispatch_once(&pred, ^{
    NSLog(@"GOES IN HERE");
    sharedContactsBuffer = [[InternalContactsHandler alloc] init];
});
return sharedContactsBuffer;

Но при первоначальном использовании, contacts мгновенно заполняется 49 элементами, тогда как в новом использовании кода он равен 0:

enter image description here

Возможно, это как-то связано с dispatch_once(&pred, ^{... Не уверен, что это значит.

...