2010-01-27 25 views
25

Kakao ile sorunsuz çalışıyorum, ancak bu sorun o kadar basit görünüyor ki öğrendiğim tüm havalı şeyleri iptal ediyor. :/Dosya Yolunu NSString'den NSURL'ye Dönüştürme

Oluşturulmuş bir dosya yolum var ve NSURL biçiminde olması gerekiyor.

NSLog(@"Old path = %@", pathToFile); 
NSURL *xmlURL = [[[NSURL alloc] init] fileURLWithPath:pathToFile]; 
NSLog(@"New path = %@", [xmlURL absoluteString]); 

Ve çıkış:: Araştırma itibaren bu yazdığım kodu

2010-01-27 15:39:22.105 MusicLibraryStats[28574:a0f] Old path = file://localhost/Users/[username]/Music/iTunes/iTunes%20Music%20Library.xml 
2010-01-27 15:39:22.105 MusicLibraryStats[28574:a0f] New path = (null) 

Öncelikle, alloc-init bile gerekli olmamalıdır; other people seem to get away with it. Bu durumda, eğer in-init yapmazsam, o satırda 'tanınmayan bir seçici' hatası alıyorum. Tabii, şimdi sadece düz (eski) yaşıyorum.

Nereye gittim?

Teşekkürler!

cevap

34

[[NSURL alloc] init] sadece gereksiz değil, geçersiz. fileURLWithPath: bir sınıf yöntemidir, yani onu sadece sınıf nesnesinde (yani, NSURL'un kendisinde) arayabilirsiniz. Bu -(NSURL *)init tip id bir nesne döndürdüğü için bir derleme hatası üretmez ve -(NSURL *)init aslında nil döndürür ve mesajlar sadece kendi dönüş değeri olarak başka nil basamakla nil gönderilen çünkü bir çalışma zamanı hatası yol açmaz.

Bu kod çalışması gerekir: Sorununu bulundu

NSString* pathToFile = @"/this/is/a/path"; 
NSURL* url = [NSURL fileURLWithPath:pathToFile]; 

. -[NSOpenPanel URLs], NSString nesneleri olarak değerlendirdiğiniz bir dizi NSURL nesnesini döndürür. Bu doğru değil. Aşağıdaki kullanmalıdır: ayıklayıcı yapabilirdim

NSURL* url = [[oPanel URLs] objectAtIndex:0]; 

göstermek sen pathToFile değişken baktı eğer. Bir dahaki sefere kontrol ettiğinizden emin olun. :) Farenizle bir değişkenin değişmesi size türünü almalıdır. Bununla birlikte, beklediğinizden başka bir türle meşru bir şekilde karşılaşacağınız durumlar olduğu unutulmamalıdır. Örneğin, özel NSPathStore2 sınıfı, NSString kümesinin bir parçasıdır ve NSPathStore2 nesnelerine NSString desteklerini her şeyi yapabilirsiniz. (Bu durumda ve emin değilseniz, beklediğiniz türde bir küme türü olup olmadığını görmek için belgelere bakın. Bu belgelere nasıl denir.)

+0

Anladım. Teşekkürler. Şu an sahip olduğum dize çevirmek için hangi yöntem kullanılabilir (varsa)? Kesme noktaları gerçekten yararlıdır, ancak bu durumda onlarla yapabileceğim fazla bir şey yok. FileURLWithPath'e adım atabilirim: ancak bir çalışma zamanı hatası söz konusuysa (tahsis etmediğimde olduğu gibi), yapabileceğim en iyi şey montajı incelemektir. – spamguy

+11

Tüm bunları yapmanız gereken: 'NSURL * xmlURL = [NSURL fileURLWithPath: pathToFile];' Hala sorunlarınız varsa, sorun 'pathToFile' ile olabilir. Öğrenmek için hata ayıklayıcısını kullanın. – Alex

+0

Nope, dizgenin en kesinlikle düz ol 'dosyası: // localhost/Users/[username] /Music/iTunes/iTunes%20Music%20Library.xml. NSOpenPanel kullanılarak oluşturuldu ...pathToFile = [[oPanel URLs] objectAtIndex: 0]; – spamguy

İlgili konular