2009-07-15 17 views
8

Bir mp3 dosyasını Kaynaklar klasörümden uygulamanın "Belgeler" klasöründeki bir klasöre kopyalamaya çalışıyorum. Simülatörde bu iyi çalışıyor. Bir cihazda çalıştırdığınızda Fakat, dosya kopyalama bu hatayı banaiPhone - kaynaklardan Belgeler'e dosya kopyalama bir hata veriyor

Operation could not be completed. (Cocoa error 513.) 

kaynağını verir ve varış noktaları yolları gayet ama hala dosyayı kopyalamak mümkün değil. Herhangi bir fikir? 513 kakao hata kodunun ne anlama geldiğini nereden öğrenebilirim?

Teşekkürler.

İşte, ben de dizin "Files" oluşturma moveItemAtPath için bir çağrı yapmadan önce ilgili kaynak kodu

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *folderPath = [documentsDirectory stringByAppendingPathComponent:@"Files"]; 

    NSString *insPath = [NSString stringWithFormat:@"%@.mp3", fileName]; 
    NSString *srcPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:insPath]; 
    NSString *destPath = [folderPath stringByAppendingPathComponent:insPath]; 
    NSLog(@"Src: %@, Dest: %@", srcPath, destPath); 

    NSError *err; 
    [fileManager moveItemAtPath:srcPath toPath:destPath error:&err]; 

    NSLog(@"Err desc-%@", [err localizedDescription]); 
    NSLog(@"Err reason-%@", [err localizedFailureReason]); 

ve o bir EVET döndürür.

Burada günlük Belgeler klasörüne kaynaklardan veri kopyalarken

Src: /var/mobile/Applications/512D7565-7EF7-4C13-A015-19EEC3F3B465/MyApp.app/MyFile.mp3, Dest: /var/mobile/Applications/512D7565-7EF7-4C13-A015-19EEC3F3B465/Documents/Files/MyFile.mp3 

Err desc-Operation could not be completed. (Cocoa error 513.) 
Err reason-(null) 

bir soru

bir sınırı dosya boyutuna var mı

sonuçları var? Kopyalamaya çalıştığım dosya yaklaşık 5 MB'tır. Bu bir sebep olabilir mi?

+0

olası dup: http://stackoverflow.com/questions/912828/how-do-i-fix-cocoa-error-513 – notnoop

+0

zaten soruyu gördüm. Buradaki sorun benim sorunumda yardımcı olmuyor – lostInTransit

+0

belki de dosyayı kopyalamak için kodu ekleyebiliyorsanız yardımcı olacaktır. – notnoop

cevap

19

DÜZENLEME:

Sadece daha basit bir çözüm buldum.toPath: Yerine moveItemAtPath biz gerçekten mainBundle dosyayı kopyalamak istediğiniz beri ... ve taşımak değil: toPath: hatayı hata :, sadece copyItemAtPath kullanın. Bunu daha önce düşünmeliydim!

E.g.

[[NSFileManager defaultManager] copyItemAtPath:mainBundleFilePath 
             toPath:destPath 
             error:&err] 

Bunun nedenini görmek için aşağıdaki önceki yorumuma bakın.


Bu sorunun cevabını aldığımı düşünüyorum. Sorunun hedef dosya yolu olmadığından emin olabilirim.

ben çok fazla olan kodun aynısını aynı Kakao hata 513 (NSFileWriteNoPermissionError) başlamıştı:

sorun dosyası, mainBundle gelen uygun izinlere sahip olmadığını görünüyor
[[NSFileManager defaultManager] moveItemAtPath:mainBundleFilePath 
             toPath:destPath 
             error:&err] 

başka bir yere taşınmak. Bu komut, idam eğer gerçekten hareket mainBundle dosya ya da sadece kopya bunun ... ama her iki şekilde, dosya yöneticisi fikir gibi görünmüyor olsaydı emin değilim.

çözüm basit: sadece yeni bir dosyaya NSData yazma sonra NSData nesnesine mainBundle dosyasını okumak ve. Hedef dosya yolunun her iki örnekte de aynı olduğunu unutmayın, bu da bize lostInTransit dosyasının dosya yolunun Tamam olduğunu söyleyerek doğru olduğunu gösterir.

Bu örnekte, daha sonra, aşağıdaki kod atmak bir hata çalışmak ve: Bunun yerine özellikler için nil geçme, kendi kodunda, BTW

NSData *mainBundleFile = [NSData dataWithContentsOfFile:mainBundleFilePath]; 
[[NSFileManager defaultManager] createFileAtPath:destPath 
             contents:mainBundleFile 
             attributes:nil]; 

:, Bir NSDictionary ile kurmak NSFileModificationDate özniteliği. Ayrıca, createFileAtPath: content: özniteliklerini, if deyimini teslim eden bir hataya da ekledim. Başka bir deyişle,

if (![[NSFileManager defaultManager] createFileAtPath:destPath 
              contents:mainBundleFile 
              attributes:myAttributes]) { 
// handle error as necessary, etc... 

}

O kadar umarım bu çözüm başkalarına yararlı olacaktır, bunu tüm anlamaya biraz zaman aldı. arasında

+0

Teşekkürler Larry. Bunun için çok uzun süre takıldım! – lostInTransit

+1

Belki de asıl sorun, dosyayı taşımaya çalıştığınızda, programdan kaynak paketini değiştirmesini (kopyaladıktan sonra silerek) sormanızdır. Kaynak paketinin bir iPhone üzerinde değiştirilebileceğini sanmıyorum (ancak Simulator üzerinde olabilir). –

+0

Anlaşmalı - iyi özetlenmiş Nevan.Benim için önemli olan, NSFileWriteNoPermissionError'ın, kaynak konum (kaynak paketi) ve hedef konumla ilgili olmadığını fark etmekti. Ayrıca, bu durumda izin hatası taşıma görevinin her iki bölümünü de engeller - kopyalama VE silme. –

3

Belgeler klasörüne doğru yolu aldığınızdan emin misiniz? Simülatördeki mutlak yol, cihazdaki mutlak yoldan farklıdır.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

cihazda documentsDirectory için yol olurdu gibi bir şey:

/var/mobile

Sen Belgeler dizinine doğru yol almak emin olmak için aşağıdaki kullanmalıdır/Uygulamalar/30B51836-D2DD-43Aa-BCB4-9D4DADFED6A2/Belgeler

simülatörde yolu olurdu gibi bir şey:

/Cilt/Stuff/Users/johndoe/Library/Application Support/iPhone Simülatörü/Kullanıcı/Uygulamalar/Sen dev site Dosya & Ağ sayfasında daha fazla bilgi bulabilirsiniz 118086A0-FAAF-4CD4-9A0F-CD5E8D287270/Belgeler

. NSFileWriteNoPermissionError var

+0

Teşekkürler Michael. Cihazda doğru yolu alıyorum. Biliyorum, çünkü bu dosyaları başka bir klasöre kopyalamaya çalışıyorum. Soruyu göndermeden önce dosyaları ve n/w sayfasını inceledim, ancak sorunu çözmeme yardımcı olacak hiçbir şey bulamadım. – lostInTransit

2

:

http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html

nasılsa, yanlış bir yol var ve onu orada yazmak izin vermiyor. Uygulamayı da silebilir ve bir kez de uygulama belgelerinizin dizininin yanlış izinlere ayarlanmış olması durumunda ...

Bize kopyayı veren kod satırını ve kullanılan her bir değişkenin çıktılarını verirdim bu satırda. Sonra sorunun ne olduğunu görebiliriz.

+0

, sorudaki kaynak kodunu ekledi. teşekkürler – lostInTransit

+0

İyi bir başlangıç, bugüne kadar Tamam görünüyor - de (özellikle src: dst: çizgi) günlüğü sonuçlarını ekleyebilir –

+0

Ben benzer bir sorun, bir saat ayıklama vardı ve silme ve uygulamasının yüklemesini sen önerdiği gibi, sorunumu çözdü! Teşekkürler. – nacho4d

İlgili konular