Çekirdek Veri çerçevesini kullanarak bir veritabanı uygulaması üzerinde çalışıyorum. Bu uygulamada, uygulamanın şu anda iPhone'da ne kadar veri kullandığını göstermem gerekiyor. Bunu yapmanın bir yolu var mı?Çekirdek Veri kalıcı deposumun boyutunu ve dosya sistemindeki boş alanı nasıl bulabilirim?
cevap
Uygulamaların ana dizin bölümünde bulunan disk alanını bulmak için yararlı olması için this answer on the Apple Dev Forums numaralı telefonu buldum (her aygıtta şu anda iki bölüm olduğunu unutmayın).
Mağaza koleksiyonunuzu almak için NSPersistentStoreCoordinator
kullanın.
Kullanım NSFileManager
bayt kod yukarıda benim app temsilci yöntemi olduğunu (unsigned long long)
NSArray *allStores = [self.persistentStoreCoordinator persistentStores];
unsigned long long totalBytes = 0;
NSFileManager *fileManager = [NSFileManager defaultManager];
for (NSPersistentStore *store in allStores) {
if (![store.URL isFileURL]) continue; // only file URLs are compatible with NSFileManager
NSString *path = [[store URL] path];
DebugLog(@"persistent store path: %@",path);
// NSDictionary has a category to assist with NSFileManager attributes
totalBytes += [[fileManager attributesOfItemAtPath:path error:NULL] fileSize];
}
Not her mağazaların büyüklüğü elde etmek ve bir özelliği persistentStoreCoordinator
sahiptir.
Çok teşekkürler :-) – Nic
Kalıcı Veri'deki kalıcı deponuz, dosya sistemindeki bir dosyadır. Çekirdek Veri kümenizi oluştururken bu dosyaya erişir ve muhtemelen bu dosyayı oluşturursunuz. Aşağıdaki kod bayt kalıcı deposunun boyutunu ve dosya sisteminin boş alan, yazdırır: Bu kalıcı mağaza persistentstore.sqlite
adlı ve uygulamanız için belgeler dizinde saklanan varsayar
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *persistentStorePath = [documentsDirectory stringByAppendingPathComponent:@"persistentstore.sqlite"];
NSError *error = nil;
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:persistentStorePath error:&error];
NSLog(@"Persistent store size: %@ bytes", [fileAttributes objectForKey:NSFileSize]);
NSDictionary *fileSystemAttributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:persistentStorePath error:&error];
NSLog(@"Free space on file system: %@ bytes", [fileSystemAttributes objectForKey:NSFileSystemFreeSize]);
. Kalıcı mağazanızın adından emin değilseniz, NSPersistentStoreCoordinator'unuzu nereye ayırdığınızı ve init yaptığınızı bulun. Dükkanın adı, oradaki kodda bir yerlerde belirtilmelidir.
Dosya ve dosya sistemi öznitelikleri sözlüklerinden geri aldığınız değerlerin NSNumbers olduğunu unutmayın, bu nedenle dosya boyutlarıyla bu şekilde çalışmak istiyorsanız bunları skaler türlere dönüştürmeniz gerekir. Dikkat edilmesi gereken bir şey, bu değerlerin bayt cinsinden olmasıdır, bu nedenle çoklu gigabaytlı dosya sistemleri için 32 bit tamsayı veri türleri ile sayı boyutu sınırlamalarına girebilirsiniz.
Teşekkürler Brad. Onun yararlı ... – Nic
@Brad: Sistemin bir uygulamanın dosya sisteminde kalan boş alanın tam (veya yakın) kullanımını kullanmasına izin verip vermediğini biliyor musunuz? Veya sistem boşluğunun uygulamaya tahsis ettiği maksimum alan mı? – mahboudz
Bir aygıtta, dahili flash bellekteki toplam boş alanın geri döndüğü görülüyor (döndürülen bayt değeri, iTunes tarafından bildirilen boş alanla eşleşiyor). Uygulamanın çalışmak için o kadar alana sahip olduğunu varsayalım. –
Nerede gördüğümü bilmiyorum, ancak veri tabanındaki girdileri kaldırmanın veritabanı dosyasını daraltmayacağına inanıyorum. SQLite depolamayı dahili olarak geri alır ve yeniden kullanır. (Bu, RDBMS'lerin tipik bir örneğidir.) Kompakt hale getirecek bir yerde bir komut satırı aracı olduğuna inanıyorum, ancak bu uygulama sizin veri kümesine dosya göndermek istediğinde size yardımcı olmayacaktır (örneğin, işletim sistemi için alan kazanmak için). .
Bu nedenle, dosya boyutu yöntemi, veritabanının yüksek-su işareti boyutu hakkında size bir fikir verirken, veri kümeniz tarafından kullanılan depolama miktarını belirtmeniz gerekmez.
- 1. Kalıcı Disk Boyutunu Azalt
- 2. Maksimum yığın boyutunu nasıl bulabilirim?
- 3. Sürüm kontrol sistemindeki en uygun düzeltmeyi nasıl bulabilirim?
- 4. Dosya sistemindeki dosya ve dizinleri simüle etmek mümkün mü?
- 5. RMagick - Bir resmin piksel boyutunu nasıl bulabilirim
- 6. Dosya sistemindeki JPEG resmini yeniden boyutlandırma
- 7. Aygıt boş alanı ve sanal alan alanı
- 8. Python'un yoluna kalıcı olarak dosya eklemek
- 9. WKWebView Çerezlerin Kalıcı Depolama Alanı
- 10. Dosya sistemindeki ASP.NET MVC sitesinin yolunu alın
- 11. java yığın boyutunu kalıcı olarak artırır?
- 12. HTML'de boş satırın boyutunu değiştirme
- 13. Çekirdek Grafik raster veri ...
- 14. ByteArrayInputStream öğesini nasıl alabilirim ve içeriğini dosya sistemindeki bir dosya olarak kaydettiririm
- 15. Kalıcı ortam tablosundan veri tablosu
- 16. Boş alanı tanımla OpenCV
- 17. İzleme çıktısını dosya sistemindeki bir dosyaya nasıl gönderilir?
- 18. Çekirdek Veri: deyim hala aktif
- 19. Özel Çekirdek Veri SectionNameKeyPath
- 20. - İlk başta dosya boyutunu
- 21. Görünümdeki boş alanı belirleme
- 22. Filtre Çekirdek Veri dizisi
- 23. PHP - alias - referers arasındaki kalıcı etki alanı
- 24. Çekirdek Veri kazasında girişimi
- 25. yedekleme .sqlite (Çekirdek veri)
- 26. Çekirdek Veri senkronize edilebilir ve com.apple.syncservices.Syncable
- 27. HornetQ 2.2.5 çekirdek istemcisinde nasıl bir sıra kalıcı hale getirilir?
- 28. Twitter Bootstrap Kalıcı veri-dismiss
- 29. NSFileManager - Dosya boyutunu kontrol edin?
- 30. Veri dizini Redis'te nerede?
buna ek olarak ne kadar veri bir uygulama iphone'da saklanabilir ??? – Nic