Я предполагаю, что вы делаете что-то еще до setSliders
, для которого вы создали NSOperation, и вы просто пропустили этот код.
UIKit не гарантированно безопасен для потоков, и вы должны толькополучить доступ к элементам интерфейса в главном потоке.Это упоминается в нескольких местах в документах, но наиболее показательно в Руководстве по основам какао:
Все объекты UIKit должны использоваться только в главном потоке.
Так что firstRun
должно выглядеть примерно так:
- (void)firstRun {
NSAutoreleasePool *pool = [NSAutoreleasePool new];
// Do something important here...
[self performSelectorOnMainThread:@selector(setSliders) withObject:nil waitUntilDone:NO];
NSLog(@"firstRun method end");
[pool drain];
}
Почему вы используете NSMutableArray
в setSliders
?Вы никогда не меняете массив, и изменяемые структуры данных могут нанести ущерб многопоточному программированию.
Кроме того, я бы переименовал метод setSliders
в нечто вроде updateSliders
.Это проблема стиля какао.Методы, которые начинаются с «set», должны использоваться для изменения одной переменной / свойства экземпляра.