2011-05-16 5 views
18

üzerinden geçen Bir takım parametre ile bir yöntem yazdığı:parametre

NSString *messageCondent; 
NSString *mode = [myclassobject messageDecryption:message outParam:messageCondent]; 

Ancak, bir sorun vardır:

-(NSString *)messageDecryption:(NSString *)receivedMessage outParam:(out)messageCondent 
{ 
    messageCondent = [receivedMessage substringFromIndex:2]; 
    return [receivedMessage substringToIndex:1]; 
} 

Sonra böyle param geçti. Çıkış parametresi doğru ayarlanmamış. Bunu doğru yapmak için bana yardımcı olabilir misiniz?

+0

bir türünü belirtmek gerekmez: Bu yöntemi çağırma

oldukça basittir? outParam: (NSString *)? – peterp

+1

Daha önce hiç kullanılmamış olan bu yöntemi kullandım. Bence çoğu insan referansla değer yaratır. (Bu sayfadaki doğru cevabı kontrol edin: https://discussions.apple.com/thread/1502936?threadID=1502936) – peterp

+2

[Kakao/iOS'ta referans olarak geçmek büyük ölçüde 'NSError ** ile sınırlıdır.] (http://stackoverflow.com/questions/3331791/arguments-by-reference-in-objective-c/3332062#3332062). Bir kerede birden fazla değer döndürmeniz gerekiyorsa, bu durum bir yapıya veya daha sıklıkla bir sınıfa yalvarır. – albertamg

cevap

26

Nesne işaretçiyi kabul etmek için yöntem oluşturun. Referansı yerel nesneye aktarın.

+6

+1, 'messageCondent' öğesini – albertamg

+0

numaralı telefona sıfırlamak ve parametreye açık bir yazı vermek için +1. –

+0

teşekkürler ... .h yönteminin tanımını da tanıyabilir miyim? – Christina

11

Bir "out parametresi", bir işaretçi için bir göstericidir.

Yöntemin bu gibi görünmelidir:

-(NSString *)messageDecryption:(NSString *)receivedMessage outParam:(NSString **)messageCondent 
{ 
    *messageCondent = [receivedMessage substringFromIndex:2]; 
    return [receivedMessage substringToIndex:1]; 
} 

Bu dereferences gerçek nesne referansı almak için pointer-geçti ve ardından atar ne olursa olsun [receivedMessage substringFromIndex:2] döner o.

NSString *messageCondent = nil; 
NSString *mode = [myclassobject messageDecryption:message outParam:&messageCondent];