我们今天有一些代码,需要一个NSArray,并将其作为参数列表传递给[NSString initWithFormat:arguments],我们正在尝试使其与ARC一起使用.这是代码正在使用
NSString* format = @"Item %s and Item %s"; // Retrieved elsewhere
NSArray* args = [NSArray arrayWithObjects:@"1", @"2", nil]; // Retrieved elsewhere
// http://cocoawithlove.com/2009/05/variable-argument-lists-in-cocoa.html
char* argsList = (char*) malloc(sizeof(NSString*) * args.count);
[args getObjects:(id*) argsList];
NSString* message = [[[NSString alloc] initWithFormat:format arguments:argsList] autorelease];
free(argsList);
关于如何使ARC符合的任何建议?或者我们甚至可以采取更好的方式来做.
最佳答案
这仅适用于具有单个元素的数组
chrisco的答案工作良好,直到我用64位架构进行编译.这造成了一个错误:
EXC_BAD_ADDRESS类型EXC_I386_GPFLT
解决方案是使用稍微不同的方法将参数列表传递给方法:
+ (id)stringWithFormat:(NSString *)format array:(NSArray*) arguments;
{
__unsafe_unretained id * argList = (__unsafe_unretained id *) calloc(1UL, sizeof(id) * arguments.count);
for (NSInteger i = 0; i < arguments.count; i++) {
argList[i] = arguments[i];
}
NSString* result = [[NSString alloc] initWithFormat:format, *argList] ;// arguments:(void *) argList];
free (argList);
return result;
}
相关文章
- 在Objective-C中将NSArray转换为NSString
- ios - 将NSString的NSArray转换为NSNumber的NSArray的更好方法
- iphone - 将NSArray分隔为NSString类型对象的列表
- iphone - 如何将NSArray转换为NSString
- 如何在Objective-C中将NSString一个接一个地转换为NSArray
- objective-c - 将NSUInteger转换为带有ARC的字符串
- objective-c - stringWithFormat与NSString上的initWithFormat
- 使用ARC不允许将非Objective-C指针类型'char *'隐式转换为'NSString *'
转载注明原文:objective-c – 将NSArray内容转换为varargs(带ARC)用于NSString initWithFormat - 代码日志