2009-11-12 5 views
7

मैं कोर डेटा ढांचे का उपयोग कर डेटाबेस अनुप्रयोग पर काम कर रहा हूं। इस एप्लिकेशन में मुझे यह प्रदर्शित करने की ज़रूरत है कि वर्तमान में आईफोन पर एप्लिकेशन कितना डेटा उपयोग कर रहा है। क्या इसे करने का कोई तरीका है?मुझे अपने कोर डेटा लगातार स्टोर का आकार और फ़ाइल सिस्टम पर खाली स्थान कैसे मिल सकता है?

+0

इसके अलावा आईफोन में कितना डेटा स्टोर कर सकता है ??? – Nic

उत्तर

9

मुझे this answer on the Apple Dev Forums ऐप्स के होम निर्देशिका विभाजन पर डिस्क स्थान उपलब्ध कराने के लिए उपयोगी होने के लिए उपयोगी पाया गया है (नोट प्रत्येक डिवाइस पर वर्तमान में दो विभाजन हैं)।

अपने स्टोर संग्रह प्राप्त करने के लिए NSPersistentStoreCoordinator का उपयोग करें।

उपयोग NSFileManager बाइट में प्रत्येक स्टोर 'आकार पाने के लिए (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]; 
} 

ध्यान दें कि कोड ऊपर मेरे ऐप प्रतिनिधि की एक विधि में है, और यह एक संपत्ति persistentStoreCoordinator है।

+0

बहुत बहुत धन्यवाद :-) – Nic

9

कोर डेटा में आपका लगातार स्टोर फ़ाइल सिस्टम पर सिर्फ एक फ़ाइल है। जब आप अपना कोर डेटा स्टैक बनाते हैं तो आप इस फ़ाइल को एक्सेस और संभवतः बनाते हैं। निम्नलिखित कोड बाइट्स में लगातार दुकान के आकार और फाइल सिस्टम के रिक्त स्थान, प्रिंट होगा:

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]); 

मतलब यह है कि अपने लगातार दुकान persistentstore.sqlite नाम पर है और आपके आवेदन के लिए दस्तावेजों निर्देशिका में संग्रहित है। यदि आप अपने निरंतर स्टोर के नाम के बारे में अनिश्चित हैं, तो आप कहां आवंटित करते हैं और अपने एनएसपीर्सिस्टेंटस्टोरकॉर्डिनेटर को इनिट करते हैं। दुकान का नाम कहीं भी कोड में कहीं निर्दिष्ट किया जाना चाहिए।

ध्यान दें कि आपके द्वारा फ़ाइल और फ़ाइल सिस्टम विशेषताएँ शब्दकोशों से वापस आने वाले मान NSNumbers हैं, इसलिए यदि आप फ़ाइल आकारों के साथ काम करना चाहते हैं तो आपको उन्हें स्केलर प्रकारों में परिवर्तित करने की आवश्यकता होगी। सावधान रहना एक बात यह है कि ये मान बाइट्स में हैं, इसलिए बहु-गीगाबाइट फाइल सिस्टम के लिए आप 32-बिट पूर्णांक डेटा प्रकारों के साथ संख्या आकार सीमाओं में भाग ले सकते हैं।

+0

धन्यवाद ब्रैड। इसका सहायक ... – Nic

+0

@ ब्रैड: क्या आप जानते हैं कि सिस्टम किसी ऐप को फ़ाइल सिस्टम पर छोड़े गए खाली स्थान के पूर्ण (या बंद) उपयोग का उपयोग करने की अनुमति देता है या नहीं? या क्या फ्री स्पेस अधिकतम लौटा दी गई है कि सिस्टम ऐप को आवंटित कर रहा है? – mahboudz

+0

किसी डिवाइस पर, ऐसा लगता है कि आंतरिक फ्लैश मेमोरी पर कुल स्थान मुक्त हो जाता है (बाइट्स लौटा मूल्य आईट्यून्स द्वारा रिपोर्ट की गई खाली जगह से मेल खाता है)। मुझे लगता है कि एप्लिकेशन के साथ काम करने के लिए बहुत अधिक जगह है। –

1

सुनिश्चित नहीं हैं कि जहां मैं इसे देखा है, लेकिन मैं मानना ​​है कि डेटाबेस से प्रविष्टियां निकालने जरूरी डेटाबेस फ़ाइल हटना नहीं होंगे। SQLite आंतरिक रूप से भंडारण पुनः प्राप्त करता है और इसका पुन: उपयोग करता है। (यह आरडीबीएमएस के विशिष्ट है।) मेरा मानना ​​है कि वहां कमांड लाइन उपयोगिता है जो इसे कॉम्पैक्ट करेगी, लेकिन यह आपकी मदद नहीं करेगा यदि आपका ऐप फ़ाइल को डेटासेट में छोटा कर देता है (उदाहरण के लिए ओएस के लिए स्पेस पुनः प्राप्त करने के लिए) ।

तो फ़ाइल आकार विधि आपको डेटाबेस के उच्च-पानी-चिह्न आकार की भावना देगी, यह आवश्यक नहीं है कि आप अपने डेटासेट द्वारा उपयोग किए जाने वाले संग्रहण की मात्रा बताएंगे।

संबंधित मुद्दे