W środowisku ARC, mam następujący kod:Rodzaj i siebie powoduje błąd kompilatora
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:delegate];
[invocation setSelector:@selector(restClient:loadedFile:contentType:eTag:)];
// Error Here!
[invocation setArgument:&self atIndex:2];
[invocation setArgument:&filename atIndex:3];
[invocation setArgument:&contentType atIndex:4];
[invocation setArgument:&eTag atIndex:5];
Ustawianie argument indeksie 2 (&self
) powoduje następujący błąd kompilatora:
Sending *const __strong * to parameter of type void * changes retain/release properties
Nie mam pojęcia, jak to naprawić, zachowując poprawny kod. W tej chwili po prostu trzymam się NULL
i zawijam instrukcję invoke w bloku try/catch, ale jest to rozwiązanie mniej niż idealne.
Podobny problem, jeśli ktoś byłby na tyle uprzejmy, aby rozwiązać go, a także:
Z tej linii kodu (z biblioteki MPOAuth)
status = SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary, (CFTypeRef *)&attributesDictionary);
pojawia się następujący błąd
Cast of an indirect pointer to an Objective-C pointer to 'CFTypeRef ' (aka 'const void *') is disallowed with ARC
Czy istnieje jakiś szczególny powód, dla którego chcesz użyć NSInvocation zamiast bloku tutaj? – NSResponder
Nie jestem pewien, jest to część SDK Dropbox. Właśnie sprawdzam zgodność z ARC, starając się nie zepsuć kodu zbyt wiele. – FeifanZ