In an ARC environment, I have the following code:
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];
Setting the argument to index 2 (&self
) causes the following compiler error:
Sending *const __strong * to parameter of type void * changes retain/release properties
I have no idea how to fix this while keeping valid code. At the moment I'm just sticking in NULL
and wrapping the invoke statement in a try/catch block, but that's a less-than-ideal solution.
With this line of code (from the MPOAuth library)
status = SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary, (CFTypeRef *)&attributesDictionary);
I get the following error
Cast of an indirect pointer to an Objective-C pointer to 'CFTypeRef ' (aka 'const void *') is disallowed with ARC
You should be able to cast it to get an appropriate pointer type:
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:delegate];
[invocation setSelector:@selector(restClient:loadedFile:contentType:eTag:)];
Foo *foo = self;
[invocation setArgument:&foo atIndex:2];
[invocation setArgument:&filename atIndex:3];
[invocation setArgument:&contentType atIndex:4];
[invocation setArgument:&eTag atIndex:5];
this line:
status = SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary, (CFTypeRef *)&attributesDictionary);
can be resolved as following:
CFTypeRef outDictionaryRef;
status = SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary, &outDictionaryRef;
attributesDictionary = (__bridge_transfer NSDictionary *) outDictionaryRef;
So in essence just give the reference type it expects as the out param. And when the out param is filled out, transfer the ownership to your cocoa type.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With