2010-12-07 22 views
14

'dan gelen NSMutableArray aşağıdaki koda sahiptir ve NSMray yerine NSMutable dizilerini kullanmak istiyorum, geçerli yöntem çalışmadığı için NSMutable dizisini nasıl yükleyeceğimi söyleyebilir misiniz?NSArray

NSMutableArray *titles = [xpathParser search:@"//h3"]; 

ama değerleri yüklemek kapsamaz:

-(void) whatever{ 
NSData *htmlData = [[NSString stringWithContentsOfURL:[NSURL URLWithString: @"http://www.objectgraph.com/contact.html"]] dataUsingEncoding:NSUTF8StringEncoding]; 
TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:htmlData]; 
NSArray *titles = [xpathParser search:@"//h3"]; // get the page title - this is xpath  notation 
TFHppleElement *title = [titles objectAtIndex:0]; 
NSString *myTitles = [title content]; 

NSArray *articles = [xpathParser search:@"//h4"]; // get the page article - this is xpath  notation 
TFHppleElement *article = [articles objectAtIndex:0]; 
NSString *myArtical = [article content]; 

i denedi? [xpathparser ...] bir NSArray döndürür varsayarsak

cevap

33

Size bir NSMutableArray dönmek için NSArray nesnesine mutableCopy nesnesini davet edebilirsiniz.

Yöntem adı, "kopya" içerdiğinden, arayanın bu nesnenin sahipliğini alacağını unutmayın.

(Apple's memory management guide bir yöntem adı "yeni" veya "kopya" Kongre tarafından sahibi bir nesne döndürmesi gerekir, ve gibi bir noktada sahipliğini vazgeçmek gerekir, sözlerini "alloc" içeren belirtiyor.)

+1

Size oy verdim ama yazdınız "teknik olarak yanlış olan bir referans numarası = 1 olan bir nesne döndürün." Aslında, kendi bağlantınızı okursanız, nesne sahipliği politikası bölümünde "tutarı koru" ifadesini bile kullanmadığını görürsünüz. – JeremyP

+0

@JeremyP Hmm, iyi nokta. Sabit. –

+1

Noktayı kaçırdınız. Apple'ın bellek yönetimi rehberi, sözleşmenin * siz * nesnenin * siz olduğunu söylüyor. Koruma sayısının 1 olduğu bir uygulama detayıdır (bu her zaman zaten doğru değildir). – JeremyP

5

, şunları kullanabilirsiniz: Sadece böyle

NSMutableArray *titles = [NSMutableArray arrayWithArray:[xpathParser search:@"//h3"]]; 
+3

'+ [NSMutableArray arrayWithArray:]' otomatikleştirilmiş olmanın avantajına sahiptir - '- [NSArray mutableCopy]' seçeneğini kullanırsanız, kendinizi serbest bırakmanız/otomatik olarak indirmeniz gerekir. –

+0

Nick Forge tarafından yapılan yorum artık ARC kapsamında ilgisiz mi? –

+0

@BasilBourque no, bazı eski ama yine de korunan uygulamalar hala MRR kullanıyorsa – James

31

:

tam anlamıyla var
NSArray* someArray = [xpathParser search:@"//h3"]; 
NSMutableArray* mutableArray = [someArray mutableCopy]; 

, bu.