Преобразование типа & self вызывает ошибку компилятора - PullRequest
9 голосов
/ 26 сентября 2011

В среде ARC у меня есть следующий код:

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];

Установка аргумента для индекса 2 (&self) вызывает следующую ошибку компилятора:

Отправка* const __strong * к параметру типа void * изменения сохраняют / освобождают свойства

Я понятия не имею, как это исправить, сохраняя действительный код.На данный момент я просто придерживаюсь NULL и оборачиваю оператор invoke в блок try / catch, но это далеко не идеальное решение.

Подобная проблема, если кто-то будет любезен решить ее также:

С этой строкой кода (из библиотеки MPOAuth)

status = SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary, (CFTypeRef *)&attributesDictionary);

Я получаю следующую ошибку

Приведение косвенного указателя на указатель Objective C на 'CFTypeRef ' (он же const void * ') запрещено ARC

Ответы [ 3 ]

13 голосов
/ 27 сентября 2011

Вы должны быть в состоянии привести его, чтобы получить соответствующий тип указателя:

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];
2 голосов
/ 09 декабря 2011

эта строка:

 status = SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary, (CFTypeRef *)&attributesDictionary);

может быть разрешена следующим образом:

 CFTypeRef outDictionaryRef;
 status = SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary, &outDictionaryRef;
 attributesDictionary = (__bridge_transfer NSDictionary *) outDictionaryRef;

Таким образом, по сути, просто укажите тип ссылки, который он ожидает в качестве выходного параметра.И когда заполненный параметр будет заполнен, передайте право собственности на ваш тип какао.

0 голосов
/ 29 сентября 2011

Вместо того, чтобы менять SDK (Dropbox сказал, что скоро будет публиковать ARC-совместимую версию), я обнаружил, что могу использовать ARC выборочно для файла. Я так и сделал.

А потом я обновился до версии 1.0b2, которая упакована в виде библиотеки и проблема решена.

...