hereの技術を使って、 "偽の"可変引数リストを作成しようとしていますが、ARC対応のプロジェクトでは、私が得ているエラーを取り除く。ARCを有効にしてchar *をid *に変換する方法
ここで問題のコードです:*非Objective-Cのポインタ型「CHARの
キャストを:
NSMutableArray* argumentsArray = [NSMutableArray array]; // ... Here I fill argumentsArray with some elements // And then, I want to construct a "fake" variable argument list char* fakeArgList = (char*) malloc(sizeof(NSString*) * [argumentsArray count]); [argumentsArray getObjects: (id*) fakeArgList]; NSString* content = [[NSString alloc] initWithFormat: formatString arguments:fakeArgList];
Xcodeは言って、(ID)fakeArgList *キャストに文句を言います'〜' _autoreleasing id * ' はARCで許可されていません
私の初期の理論はth私はちょうど__unsafe_unretainedを(id *)キャストに追加して、私がそのメモリブロックを担当していることをARCに伝える必要があります。保持しないでください。しかし、それはうまくいかず、どうやってこの問題を解決する。
更新:これは完全な機能です。 printf形式の書式文字列と.plist内のフィールド名の変数リストをとり、.plistから読み込まれたデータを含む書式付き文字列を出力する必要があります。つまり、私はフィールド "フィールド1" = "foo" と "フィールド2" = 3と私は、私は、文字列を取得する必要があります[loadStringFromFixture: @"?param1=%@¶m2=%d", @"field1", @field2]
を呼ぶ "?のparam1 = fooの& PARAM2 = 3"
- (NSString*) loadStringFromFixture:(NSString*) format, ...
{
NSString* path = [[NSBundle mainBundle] bundlePath];
NSString* finalPath = [path stringByAppendingPathComponent:@"MockAPI-Fixtures.plist"];
NSDictionary* plistData = [NSDictionary dictionaryWithContentsOfFile:finalPath];
va_list argumentsList;
va_start(argumentsList, format);
NSString* nextArgument;
NSMutableArray* argumentsArray = [NSMutableArray array];
while((nextArgument = va_arg(argumentsList, NSString*)))
{
[argumentsArray addObject: [plistData objectForKey:nextArgument]];
}
NSRange myRange = NSMakeRange(0, [argumentsArray count]);
id* fakeArgList = (__bridge id *)malloc(sizeof(NSString *) * [argumentsArray count]);
[argumentsArray getObjects:fakeArgList range:myRange];
NSString * content = [[NSString alloc] initWithFormat:formatString
arguments:(__bridge va_list)fakeArgList];
free(fakeArgList);
return content;
}
これを行うには良い方法があるに違いありません... – semisight
真剣に。ソース記事をすばやく読んで、私はそれが偶然によってしか機能しないと思ってしまい、ABIや仕様の範囲外です。 – bbum
これは本当ですが、単体テストコードの場合にのみ必要なので、かなり汚いハックということにはあまり気にしません。誰かが可変引数リストを作成するより良い方法を指摘できれば、私は本当に興味があります。 –