2017-01-16 8 views
0

スレッド内でループを実行できるオブジェクトを構築したい。 私はNSThreadを使用してスレッドのループを実行し、時には正常に動作し、時にはエラーメッセージが表示されます。Objective-C Loop in 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; 
} 

答えて

0

NILを挿入しようとすると、NSDictionaryがクラッシュします。ただし、NSNULL引数を挿入できます。

オブジェクトがnilであるかどうかを確認するには、代わりにNSNULLを挿入します。

controlObject != nil ? controlObject : [NSNull null]; 
+0

私は理解していません、あなたはこれを説明できますか? – Sam

+0

私はあなたのエラーログを見てあなたの質問に誤解しました。おそらくこれはスレッドセーフではないため、複数のスレッドが同時にアイテムにアクセスしようとしている可能性があります。これに関する複数の似たような質問があります。これを見てみましょう:http://stackoverflow.com/questions/12091212/understanding-nsrunloop –

+0

私は、タートルやウサギのレースプログラムのようなレースゲームを作って、客観的な - cのスレッドを理解したいと思います。 Javaのスレッドと同じように使いやすいものではありません。私はこれについてもっと学ぶ必要があると思う。どうもありがとうございました。 – Sam