我想將選擇器添加到NSMutableArray。但是因爲它們是不透明的類型並且沒有對象,所以這是行不通的,對吧?有我可以使用的包裝對象嗎?或者我必須創建自己的?是否有SEL的包裝對象?
4
A
回答
5
可以存儲在陣列中選擇的NSString的名稱,並使用
SEL mySelector = NSSelectorFromString([selectorArray objectAtIndex:0]);
生成從存儲的字符串的選擇。
此外,可以打包使用的東西,選擇作爲NSInvocation的像
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:mySelector]];
[invocation setTarget:self];
[invocation setSelector:mySelector];
[invocation setArgument:&arg atIndex:2];
[invocation retainArguments];
然後將該NSInvocation的對象可以被存儲在數組中和以後調用。
9
您可以在NSValue
爲例說明如下把它包:
SEL mySelector = @selector(performSomething:);
NSValue *value = [NSValue value:&mySelector withObjCType:@encode(SEL)];
再增值到您NSMutableArray
實例。
2
NSValue valueWithPointer/pointerValue同樣適用。
如果你想這樣做,你只需要知道你不能序列化數組(如寫入文件),請使用NSStringFromSelector方法。
這些都將選擇到一個NSValue對象的所有有效途徑:
id selWrapper1 = [NSValue valueWithPointer:_cmd];
id selWrapper2 = [NSValue valueWithPointer:@selector(viewDidLoad)];
id selWrapper3 = [NSValue valueWithPointer:@selector(setObject:forKey:)];
NSString *myProperty = @"frame";
NSString *propertySetter = [NSString stringWithFormat:@"set%@%@:",
[[myProperty substringToIndex:1]uppercaseString],
[myProperty substringFromIndex:1]];
id selWrapper4 = [NSValue valueWithPointer:NSSelectorFromString(propertySetter)];
NSArray *array = [NSArray arrayWithObjects:
selWrapper1,
selWrapper2,
selWrapper3,
selWrapper4, nil];
SEL theCmd1 = [[array objectAtIndex:0] pointerValue];
SEL theCmd2 = [[array objectAtIndex:1] pointerValue];
SEL theCmd3 = [[array objectAtIndex:2] pointerValue];
SEL theCmd4 = [[array objectAtIndex:3] pointerValue];
相關問題
- 1. 是否有可能(以及如何)使RDOMail對象包裝MAPI IMessage對象?
- 2. 創建對象的SEL傳遞給它
- 3. 包裝對象是否可以「變成」相同類型的對象?
- 4. scrapy shell無法識別'sel'對象
- 5. ICustomTypeDescriptor包裝對象
- 6. 是否有Monotouch的OpenCV包裝?
- 7. 是否有Scala的OAuth包裝庫?
- 8. 是否有Tumblr API的JavaScript包裝?
- 9. 是否有完整的win32包裝庫?
- 10. $(sel).bind(「click」,$(sel).click(,$(sel).live(「click」,$(sel).on(「click」)有什麼顯着區別?
- 11. Zend是否爲Zend_XmlRpc返回值提供對象包裝?
- 12. 的對象和包裝類
- 13. 對象的C#包裝
- 14. 如何在YUI對象包裝中包裝javascript對象文字?
- 15. 如何檢查對象的ArrayList是否包含我的對象?
- 16. 是否有Dojo XPATH對象?
- 17. 對象是否有「子」
- 18. 是否有FreePascal Dictionary對象?
- 19. 檢查對象列表是否包含具有特定屬性值的對象
- 20. 是否有任何WebM libvpx .Net包裝?
- 21. 是否只有CSS容器包裝?
- 22. cron周圍是否有Python包裝?
- 23. 是否有可能重新包裝APK
- 24. (現代)OpenGL是否有Clojure包裝?
- 25. R中是否有「包裝」功能?
- 26. 檢查JavaScript對象是否包含X?
- 27. 檢查java arraylist是否包含對象
- 28. 檢查HashSet/HashMap是否包含對象
- 29. 檢查對象是否包含數組中的所有鍵
- 30. 檢查NSArray是否包含具有特定屬性的對象
有趣 - 我從來沒有使用NSInvocation的 - 謝謝! – 2009-06-01 23:15:52