Öncelikle -[NSSavePanel filename]
seçici kullanımdan kaldırılmıştır. Bunun yerine -[NSSavePanel URL]
kullanın. İkincisi, -[NSString writeToFile:atomically:encoding:error]
'un yanlış yaptığınızı söyleme biçimi error:(NSError**)
bağımsız değişkenidir.
Özellikle I/O dosyalarının hatalarını ele almalısınız, çünkü kodunuz% 100 doğru olsa bile, kullanıcının sisteminde hatalar olabilir (yetersiz ayrıcalıklar, vb.) Ve hata kullanıcıya bildirilir. başarısız olduklarını görmelerine izin verecek (ve neden bazı fikirleri vardır). Koddaki hatayı işlemek, uygulamanızın kurtarılmasına da izin verecektir. Örneğin, yapıştırdığınız kodun altındaki dosyayı (dosyaya yazdıktan sonra) okumayı denediyseniz, ancak kullanıcı erişemediği bir ağ paylaşımına yazmayı denediyse, uygulamanız çökebilir. Yazmanın başarısız olduğunu biliyorsanız, buna göre ilerleyebilirsiniz (belki de farklı bir kaydetme konumu için).
uygulama korumalı alan edilir
NSString *fileName = [[NSString alloc] initWithFormat:@"%@.dat", selectedFile];
, kullanıcı belirli bir dosya veya belirli bir biri için size izin vermesi gerekir: Bu durumda
olsa da, ben aşağıdaki satırı senin sorunun olduğuna inanıyoruz Açma/kaydetme panelleri aracılığıyla onları sandbox'ınıza getirmek için numaralı dizini açın. Yaptığınız şey, kullanıcının "bu harika, ama farklı bir dosyayı kaydetmek istiyorum" yazmasını ve söyleyebilmesini sağlayan dosyayı alıyor. Bunun yerine yapmanız gereken, uzantıyı Kaydetme Paneline ayarlıyor. komple sabit bir çözüm olacaktır: başka gelecek şeylerin yanlış olduğunu içinde
NSSavePanel *save = [NSSavePanel savePanel];
[save setAllowedFileTypes:[NSArray arrayWithObject:@"dat"]];
[save setAllowsOtherFileTypes:NO];
NSInteger result = [save runModal];
if (result == NSOKButton)
{
NSString *selectedFile = [[save URL] path];
NSString *arrayCompleto = @"bla bla bla";
NSError *error = nil;
[arrayCompleto writeToFile:selectedFile
atomically:NO
encoding:NSUTF8StringEncoding
error:&error];
}
if (error) {
// This is one way to handle the error, as an example
[NSApp presentError:error];
}
, çalışma zamanında
error
değerini kontrol edebilirsiniz edin. Hata ayıklama yaparken,
error
nesnesinin değerini kontrol etmek için
if (error)
ifadesinin içinde bir kesme noktası ayarlayın (Xcode'un hata ayıklayıcısında
po error
yapın). Bu neyin yanlış olduğunu anlamanıza yardımcı olmalı.
Çok teşekkürler kardeşim! Bir çekicilik gibi çalıştı! Yardımlarınız için teşekkürler! Massy – Blue
Sorun değil. Ayrıca bahsetmeyi de unutmam, özellikle de dosya I/O ile uğraşırken hataların üstesinden gelmek için iyi bir uygulama çünkü kodunuz% 100 doğru olduğunda bile, bir kullanıcının sisteminde sorunlar (yetersiz ayrıcalıklar, vb.) Olabilir. Bunu cevaba ekledim. – Dov
İstenen kaydetme dosya adını, 'Untitled' belgesi olarak kaydetmeyecek şekilde de ayarlayabilirsiniz: [save setNameFieldStringValue: @ "MySuggestedFilename"] –