trzeba utworzyć w aplikacji iOS fałszywy va_list
przejść do NSString initWithFormat:arguments:
funkcji, to jest mój kod:fałszywy va_list w ARC
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);
Kompilator narzeka z tej wiadomości na linii Obsada:
error: cast of a non-Objective-C pointer type 'va_list' (aka 'char *') to '__unsafe_unretained id *' is disallowed with ARC
funkcja getObjects:range:
jest zdefiniowany w następujący sposób:
- (void)getObjects:(id __unsafe_unretained [])objects range:(NSRange)range;
Próbowałem już wszystkiego, ale nadal nie mogę pozbyć się tego błędu ...
Czy istnieje rozwiązanie do tworzenia fałszywego va_list
z włączonym ARC? Co ja robię źle?
Dziękuję bardzo ... buduję widok kompletacji że dany plist zawierał szereg słowników, format wydruku, powiedzmy ' "(% @ -% @)% @"' , a lista kluczy zapełnia widok selektora sformatowanym ciągiem wyodrębniającym dane z pliku plist. Jedynym sposobem na użycie sformatowanego wydruku ze zmienną listą argumentów było sfałszowanie va_list. Wiem, że to dalekie od czystego programowania, ale nie mogłem wymyślić lepszego rozwiązania, każda ważna alternatywa jest naprawdę mile widziana i myślę, że opublikuję kolejne pytanie dotyczące mojego problemu, aby znaleźć bardziej przejrzyste rozwiązanie. – Scakko
Jeśli zawsze pracujesz z% @ i nigdy innymi parametrami, możesz po prostu wyszukać wystąpienia% @ w ciągu znaków i zastąpić je [opisem obiektu] dla każdego z parametrów. Ten sam efekt, bez fałszywej va_list. Ale to nie zadziała w przypadku formatowania liczbowego ani niczego innego, chyba że chcesz zrobić dużo dodatkowej pracy. – ipmcc
Spróbuję dzisiaj, dziękuję bardzo ... – Scakko