我需要在iOS應用程序假va_list
傳遞到的NSString initWithFormat:arguments:
函數來創建,這是我的代碼:假的va_list
NSArray *fixedArguments = [[NSArray alloc] initWithArray:arguments];
NSRange range = NSMakeRange(0, [fixedArguments count]);
va_list fakeArgList = (va_list)malloc(sizeof(NSString *) * [fixedArguments count]);
__unsafe_unretained id *ptr = (__unsafe_unretained id *)fakeArgList;
[fixedArguments getObjects:ptr range:range];
content = [[NSString alloc] initWithFormat:outputFormat
arguments:(va_list)fakeArgList];
free(fakeArgList);
編譯器與投行此消息抱怨:
error: cast of a non-Objective-C pointer type 'va_list' (aka 'char *') to '__unsafe_unretained id *' is disallowed with ARC
getObjects:range:
該函數被定義爲如下:
- (void)getObjects:(id __unsafe_unretained [])objects range:(NSRange)range;
我已經嘗試了一切,但仍然無法擺脫這個錯誤...
是否有解決方案創建一個假ARC va_list
啓用?我究竟做錯了什麼?
太感謝你了...... 我建設,鑑於字典的plist中包含數組選擇器視圖,打印格式,讓我們說'「(%@ - %@)%@」' ,並使用從plist文件中提取數據的格式化字符串填充選擇器視圖。 我發現使用具有變量列表參數的格式化打印的唯一方法是僞造一個va_list。 我知道它遠不是簡單的編程,但我不能提出更好的解決方案,任何有效的替代方案都非常受歡迎,我想我會發布有關我的問題的另一個問題,以找到更清晰的解決方案。 – Scakko
如果您始終使用%@並且沒有使用任何其他大小的參數,則只需在字符串中搜索%@的實例並將其替換爲每個參數的[對象描述]即可。同樣的效果,沒有假的va_list。但是這不適用於數字格式或其他任何東西,除非你想做很多額外的工作。 – ipmcc
今天我試試看,非常感謝你... – Scakko