Цикл 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];
Другие вопросы по тегам