2015-05-02 4 views
6

सच एप्लिकेशन और एक्सटेंशन के बीच क्षेत्र डेटा को साझा करने की हाल ही में इसके बारे में उत्साहित। प्रलेखन विवरण ऐप समूह निर्देशिका में डिफ़ॉल्ट क्षेत्र को सेट करने का तरीका बताता है, मुझे यह काम मिल गया है। क्या सबसे अच्छा तरीका एप्लिकेशन समूह में नए स्थान पर पुराने डेटाबेस हस्तांतरण करने के लिए है -किसी ऐप समूह में रीयल डेटाबेस को माइग्रेट कैसे करें?

यहाँ है कि मैं क्या कर रहा हूँ पर अटक है?

+0

क्या कोई कारण है कि आप NSFileManager का उपयोग करके फ़ाइल को स्थानांतरित नहीं कर सकते हैं? – segiddins

+0

एप्पल से परहेज फ़ाइल समन्वय एपीआई पता चलता है, के रूप में डेटा दूषित कर सकते हैं: https://developer.apple.com/library/ios/technotes/tn2408/_index.html – Whoa

+0

के बाद से अपने ऐप्लिकेशन इसे स्थानांतरित करने में सक्षम हो जाएगा, और आप कर सकते हैं इसलिए atomically है, तो आप ठीक हो जाओगे – segiddins

उत्तर

7

@segiddins टिप्पणी के आधार पर, मैं NSFileManager का उपयोग करके ऐप समूह पुराने डेटाबेस चलती के साथ जाने का फैसला किया:

let fileManager = NSFileManager.defaultManager() 

    //Cache original realm path (documents directory) 
    let originalDefaultRealmPath = RLMRealm.defaultRealmPath() 

    //Generate new realm path based on app group 
    let appGroupURL: NSURL = fileManager.containerURLForSecurityApplicationGroupIdentifier("group.AppGroup")! 
    let realmPath = appGroupURL.path!.stringByAppendingPathComponent("default.realm") 

    //Moves the realm to the new location if it hasn't been done previously 
    if (fileManager.fileExistsAtPath(originalDefaultRealmPath) && !fileManager.fileExistsAtPath(realmPath)) { 

     var error: NSError? 
     fileManager.moveItemAtPath(originalDefaultRealmPath, toPath: realmPath, error: &error) 

     if (error != nil) { 
      println(error) 
     } 
    } 

    //Set the realm path to the new directory 
    RLMRealm.setDefaultRealmPath(realmPath) 
0

आशा यह अन्य पाठक में मदद मिलेगी।

रूप https://github.com/realm/realm-cocoa/issues/4490 में चर्चा की, आप अनुप्रयोग समूह पथ नीचे कोड और उपयोग फ़ाइल प्रबंधक के साथ ऊपर उल्लेख के रूप में मौजूदा डाटाबेस स्थानांतरित करने के लिए सेट कर सकते हैं।

var config = Realm.Configuration() 
config.fileURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroupIdentifier)!.appendingPathComponent(dbFilename) 
Realm.Configuration.defaultConfiguration = config 
संबंधित मुद्दे