Цикл Objective-c в NSThread
Я хочу построить объект, который может запустить цикл в потоке. Когда я запускаю цикл в потоке, используя NSThread, иногда работает нормально, а иногда появляется сообщение об ошибке:
Uncaught exception NSInvalidArgumentException, reason: Tried to add nil value for key 'NSArgumentDomain' to dictionary.
Как мне это исправить? Или учебник NSthread может быть полезен.
#import <Foundation/Foundation.h>
@interface ThreadTest: NSObject
-(void) run;
-(void) goThread;
@end
@implementation ThreadTest
-(void) run {
@autoreleasepool {
int i;
for (i = 1; i < 5; i++) {
NSLog (@"Bar");
}
NSLog (@"end of loop");
}
}
-(void) goThread {
[NSThread detachNewThreadSelector: @selector(run)
toTarget: self
withObject: nil];
}
int main(void) {
@autoreleasepool {
ThreadTest *t = [[ThreadTest alloc] init];
[t goThread];
}
return 0;
}
1 ответ
Решение
NSDictionary падает, если вы пытаетесь вставить NIL к нему. Тем не менее, вы можете вставить аргумент NSNULL к нему.
Так что просто проверьте, если ваш объект nil, вместо этого вставьте NSNULL.
controlObject != nil ? controlObject : [NSNull null];