
Nsstring从格式字符串像@“xxx =%@,yyy =%@”和对象的NSArray?
在Nsstring类中有很多方法如:
- (ID)initWithFormat:(Nsstring *)format arguments:(va_List)argList- (ID)initWithFormat:(Nsstring *)format locale:(ID)locale arguments:(va_List)argList+ (ID)stringWithFormat:(Nsstring *)format,...
但不是他们以NSArray作为参数,我找不到一种方法从一个NSArray创建一个va_List …
解决方法 实际上不难从NSArray创建一个va_List。参见Matt gallagher的 excellent article主题。这里是一个Nsstring类别做你想要的:
@interface Nsstring (NSArrayFormatExtension)+ (ID)stringWithFormat:(Nsstring *)format array:(NSArray*) arguments;@end@implementation Nsstring (NSArrayFormatExtension)+ (ID)stringWithFormat:(Nsstring *)format array:(NSArray*) arguments{ char *argList = (char *)malloc(sizeof(Nsstring *) * arguments.count); [arguments getobjects:(ID *)argList]; Nsstring* result = [[[Nsstring alloc] initWithFormat:format arguments:argList] autorelease]; free(argList); return result;}@end 然后:
Nsstring* s = [Nsstring stringWithFormat:@"xxx=%@,yyy=%@" array:@[@"XXX",@"YYY"]];NSLog( @"%@",s );
不幸的是,对于64位,va_List格式已经改变,所以上面的代码不再工作。并且可能不应该使用反正给它取决于格式,显然可能改变。给定没有真正可靠的方法来创建一个va_List,一个更好的解决方案是简单地将参数的数量限制在合理的最大值(例如10),然后调用stringWithFormat与前10个参数,像这样:
+ (ID)stringWithFormat:(Nsstring *)format array:(NSArray*) arguments{ if ( arguments.count > 10 ) { @throw [NSException exceptionWithname:NSRangeException reason:@"Maximum of 10 arguments allowed" userInfo:@{@"collection": arguments}]; } NSArray* a = [arguments arrayByAddingObjectsFromArray:@[@"X",@"X",@"X"]]; return [Nsstring stringWithFormat:format,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10] ];} 总结 以上是内存溢出为你收集整理的objective-c – 如何从一个格式字符串,如@“xxx =%@,yyy =%@”和对象的NSArray创建一个NSString?全部内容,希望文章能够帮你解决objective-c – 如何从一个格式字符串,如@“xxx =%@,yyy =%@”和对象的NSArray创建一个NSString?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)