NSData *data;
data = [self fillInSomeStrangeBytes];
Sorum için NSData yazmak için en kolay yolu Bir dosyanın en kolay yolu üzerinde bu data
yazabilirsiniz nasıl şimdi.bir dosyaya
NSData *data;
data = [self fillInSomeStrangeBytes];
Sorum için NSData yazmak için en kolay yolu Bir dosyanın en kolay yolu üzerinde bu data
yazabilirsiniz nasıl şimdi.bir dosyaya
NSData
yapmak istediğiniz tam olarak ne yapar writeToURL:atomically:
adlı bir yöntem vardır (Zaten bir NSURL file://localhost/Users/Coding/Library/Application%20Support/App/file.strangebytes
ettik). Nasıl kullanılacağını görmek için the documentation for NSData
'a bakın.
writeToURL:atomically: veya writeToFile:atomically: bunun yerine bir URL bir dosya adı varsa. bir dosyaya NSData
yazma
+1. NSURL bir dosyaya işaret ettiğinizde NSString pwns. Apple, her zaman NSString yerine dosya yolları için NSURL önerir. :) –
writeToURL ile writeToFile arasında bir fark olduğunu sanmıyorum. Belgelere göre: "Şu anda sadece dosya: // URL'ler desteklendiği için, bu yöntem ile writeToFile arasında atomik olarak hiçbir fark yoktur :, ilk argüman türü hariç" –
"NSData" nesnesinin kaynağı önemli mi? bu yöntem için? [Bu soruda] (http://stackoverflow.com/questions/16150196/updating-sqlite-database-without-xml) Bir URL'den 'NSData' nesnesine indirdiğim .sqlite veritabanını kaydediyorum ama doğru kaydetmiyor gibi görünüyor. Dosya yazılmıştır, ancak erişmeye çalıştığımda (uygulamamda veya bir 3. taraf görüntüleyici ile), geçerli bir SQLite veritabanı olmadığını söyler. WriteToURL: atomically: 'sadece NSString'leri veya bunun gibi bir şeyi kaydetmek için çalışıyor mu? – GeneralMike
Bildirimi ana iş parçacığı engelleyebilir IO işlemdir. Özellikle veri nesnesi büyükse.
// Use GCD's background queue
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
// Generate the file path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"yourfilename.dat"];
// Save it into file system
[data writeToFile:dataPath atomically:YES];
});
nasıl alınır? –
['dataWithContentsOfFile:'] (https://developer.apple.com/documentation/foundation/nsdata/1547226-datawithcontentsoffile?language=objc) – Rob
Ayrıca writeToFile:options:error:
veya writeToURL:options:error:
durumda tasarruf içinde hata kodları rapor hangi vardır: şöyle
nedenle bir arka plan iş parçacığı üzerinde bu gerçekleştirmek için tavsiye edilir, en kolay yolu GCD'yı kullanmak olacaktır NSData
herhangi bir nedenden dolayı başarısız oldu. Örneğin:
NSError *error;
NSURL *folder = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:true error:&error];
if (!folder) {
NSLog(@"%s: %@", __FUNCTION__, error); // handle error however you would like
return;
}
NSURL *fileURL = [folder URLByAppendingPathComponent:filename];
BOOL success = [data writeToURL:fileURL options:NSDataWritingAtomic error:&error];
if (!success) {
NSLog(@"%s: %@", __FUNCTION__, error); // handle error however you would like
return;
}
endian konularda dikkat edin. –
"NSData" nesnesinin kaynağı bu yöntem için önemli midir? Ben bir URL'den bir 'NSData' nesnesine indirilen bir .sqlite veritabanını saklıyorum (http://stackoverflow.com/questions/16150196/updating-sqlite-database-without-xml) [Bu soruda], ancak doğru kaydetmiyor gibi görünüyor. Dosya yazılı, ama ben (benim uygulaması aracılığıyla veya 3. taraf görüntüleyici ile ya) erişmeye çalıştığınızda bunun geçerli bir SQLite veritabanı değil söylüyor edilir. WriteToURL: atomically: 'sadece NSString'leri veya bunun gibi bir şeyi kaydetmek için çalışıyor mu? – GeneralMike
'NSData', her tür ikili veri için bir sarıcıdır. Orijinal kaynak önemli olmamalı. Sorunuzun bakınca initWithContentsOfURL 'üzerinde' NSURLConnection' (veya AFNetworking' 'gibi bir kütüphane) kullanarak öneriyoruz:'. Küçük dosyalar için, 'NSData' iyi olabilir, ancak indirme işlemi üzerinde herhangi bir kontrol sağlamaz. Bir şeyler ters gittiğinde, bu sorunu teşhis etmeyi zorlaştırır. NSURL için – Alex