2010-12-06 39 views
0

我有一個的NSSet對象,我想在一個performSelector -call經過:performSelector不會通過對象到選擇

NSSet *myNSSetObject = [self getSet]; 

if (myNSSetObject.count != 1) 
    return; 

[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5]; 

的問題是,在對象到達myMethod空。由於performSelector保留傳遞的對象,我不明白髮生了什麼問題。

我的方法是定義如下

- (void)myMethod:(NSSet *)myNSSetParam { 
    NSLog(@"Set count: %d", myNSSetParam.count); 
    [do sth]; 
} 

的的NSLog顯示: 集數:0


展望深入到此事,並已經通過上述計數建議的,NSSet中的對象是實際上已經過去了,但卻失去了記錄。

是不是NSSet保留其對象?

回答

1

你肯定getSet返回實際NSSet,而不是一個可變的子類的NSSet 「基指針」下隱藏?如果它是可變的,則可以在0.5秒延遲內對該組進行修改。即使performSelector:withObject:afterDelay:保留了該設置,它也不會阻止它被修改。

2

myMethod實際上是否有參數?需要注意Objective-C中的方法名稱和選擇符實際上包含了聲明中存在的冒號;因此,像這樣的方法:

- (void)myMethod:(NSSet *)set; 

必須引用@selector(myMethod:),包括尾隨冒號。

+0

是的。我更新了問題以顯示電話,謝謝。 – iFloh 2010-12-06 09:52:00

0

你應該叫

[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5]; 

代替(注意消息名稱後面的冒號)。

+0

與上面相同,是一個錯字(更新),謝謝 – iFloh 2010-12-06 09:51:15

0

您的意思是

[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5] 

假設myMethod:是需要的對象的方法?

+0

是的,我做了...錯字,只是更新...謝謝 – iFloh 2010-12-06 09:45:40

2

從第一條消息返回(或部分位於發佈代碼片段之下)後,您是否意外地更改[self getSet]提供的NSSet?如果您之後從集合中刪除對象,myMethod:將無法​​再訪問它。