2012-01-14 11 views
10

ARC kullanan bir projede çalışıyorum ve halihazırda sahip olduğum bir kod parçası ile sorun yaşıyorum.Dolaylı bir işaretçinin ARC ile hedef-c işaretçisine dolaylı olarak dönüştürülmesi

heres kod: 'NSError' için objektif-c pointer için dolaylı işaretçisi

örtük dönüştürme ARC ile izin verilmese:

- (id)initWithError:(NSError **)error 
{ 
    if ((self = [super init])) 
    { 
     errorPointer = error; //Getting error here 
    } 

    return self; 
} 

Im şeklinde bir hata alıyorum.

Bu sorunu gidermek için ne yapmalıyım? Köprülü bir oyuncu kadrosunu denedim ama işe yaramadı. Herhangi bir yardım için teşekkür ederiz.

Ah sadece açıklama için, .h dosyasında bu ben değişken errorPointer ilan nasıl olup:

NSError * errorPointer;

Teşekkürler!

cevap

9

O

errorPointer = *error; // no error here 

iki değişken dolaylama düzeyine göre farklılık olmalı (sadece konuşma, kendi bildiriminde yıldızların sayısı aynı değildir). errorPointer'un * ürününün * numarasını *'un önüne geçirmek için eklemeniz gerekir.

+2

'errorPointer =' error; '? – UIAdam

+0

@AdamW Kesinlikle, siz haklısınız! Adlandırma nedeniyle kafam karıştı. Teşekkürler! – dasblinkenlight

+0

Çok teşekkür ederim! Bu sorunu çözdü! –

1

errorPointer ve hatanın eşleşmeyen türleri var.

Bulunduğunuz koda dayanarak, error argümanı sadece NSError * olarak bildirilmiş gibi görünüyor.

+0

Sadece hafifçe genişletmek için, bir çift dolaylı argümanı (NSError ** ') kullanmanın tek nedeni, bu init yönteminde hatayı tahsis etmeniz ve arayanı kullanabilmeniz için gerekliydi. – UIAdam

+0

Evet ve bu, Kakao yöntemlerinde ortak bir modeldir. Birçok Kakao çerçeve metodu, bir hata (eğer varsa) yöntemine ilişkin bir referanslı “NSError *” argümanı ile döner. –

+0

@AndrewMadsen Elbette ... ama bu durumda bunu yapmak istediği belli değil, bu yüzden argümanın türünü değiştirmek için önerim. – UIAdam

İlgili konular