Я пытаюсь заполнить 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](https://i.stack.imgur.com/kxsFD.png)
Возможно, это как-то связано с dispatch_once(&pred, ^{...
Не уверен, что это значит.