我需要從格式字符串生成字符串的方法,它的內部NSArray的論點,但我我以前不覺得在StackOverflow的任何可行的解決方案。他們不建,也不拋出異常(first,second)。的NSString stringWithFormat和NSArray的
0
A
回答
3
所以,我寫我的解決方案,我想與你分享。
@implementation NSString (AX_NSString)
+ (instancetype)ax_stringWithFormat:(NSString *)format array:(NSArray *)arrayArguments {
NSMethodSignature *methodSignature = [self ax_generateSignatureForArguments:arrayArguments];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
[invocation setTarget:self];
[invocation setSelector:@selector(stringWithFormat:)];
[invocation setArgument:&format atIndex:2];
for (NSInteger i = 0; i < [arrayArguments count]; i++) {
id obj = arrayArguments[i];
[invocation setArgument:(&obj) atIndex:i+3];
}
[invocation invoke];
__autoreleasing NSString *string;
[invocation getReturnValue:&string];
return string;
}
//https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html
+ (NSMethodSignature *)ax_generateSignatureForArguments:(NSArray *)arguments {
NSInteger count = [arguments count];
NSInteger sizeptr = sizeof(void *);
NSInteger sumArgInvoke = count + 3; //self + _cmd + (NSString *)format
NSInteger offsetReturnType = sumArgInvoke * sizeptr;
NSMutableString *mstring = [[NSMutableString alloc] init];
[mstring appendFormat:@"@%[email protected]:%zd", offsetReturnType, sizeptr];
for (NSInteger i = 2; i < sumArgInvoke; i++) {
[mstring appendFormat:@"@%zd", sizeptr * i];
}
return [NSMethodSignature signatureWithObjCTypes:[mstring UTF8String]];
}
@end
相關問題
- 1. stringWithFormat和NSArray的
- 2. NSString stringWithFormat和Memory Mgmt
- 3. 的NSString stringwithstring和stringwithformat差異
- 4. NSString stringWithFormat
- 5. NSString中的EXC_BAD_ACCESS stringWithFormat?
- 6. 的NSArray和NSString的
- 7. NSString stringWithFormat很慢
- 8. NSString stringWithFormat問題
- 9. 的NSString stringWithFormat百分號
- 10. [NSString stringWithFormat]的崩潰問題:
- 11. NSString中的OBJC_MSGSEND錯誤stringWithFormat
- 12. 字符數組[的NSString stringWithFormat:]
- 13. objective-c NSString stringwithformat的URL
- 14. NSArray的值NSString
- 15. NSArray arrayWithObjects最後需要nil,NSString stringWithFormat和NSLog()不需要。爲什麼?
- 16. NSString stringWithFormat:與C數組?
- 17. NSString - stringWithFormat自動發佈
- 18. NSString stringWithFormat:隨機替換數
- 19. NSString stringWithFormat:對於數字值
- 20. 何時使用NSString stringWithFormat;
- 21. int stringWithFormat到NSString返回值
- 22. 來自NSArray的NSString
- 23. 的NSString stringWithFormat事與願違的結果
- 24. 使用的NSString stringWithFormat:從NSDictionary的
- 25. 快速比較NSArray和NSString?
- 26. 逗號分隔千的NSString stringWithFormat
- 27. 的NSString stringWithFormat不能添加反斜線
- 28. NSString到NSArray
- 29. NSString到NSArray
- 30. ReConvert NSString到NSArray
這仍然是一個嚴重的措辭重複的問題。您應該添加你的答案到你提到的問題,理想的第一個一個... – Wain
關閉,因爲https://stackoverflow.com/a/35089943/ –