Swiftを使用してiOS用のアプリケーションを開発しており、そのデータベースソリューションとしてレルムを選択しました。レルムドキュメントの書き込み/追加機能を使用してAppDelegateにデフォルトのデータを書き込んだので、問題なく動作します。最初の起動後、初期データを含む* .realmファイルがあります。レルムのドキュメントで、 "レルムとアプリのバンドル" というセクションを見つけました。*。realmファイルをプロジェクトに追加し、記述どおりにフェーズを構築します。
そして、次に何をすべきか(そして* .realmファイルの圧縮についての部分)を理解できません。 移行例 のコードを理解しようとしましたが、Obj-Cについてはよくわかりません。
初期データを含む* .realmファイルをSwift iosプロジェクトに追加し、最初の起動時にこのデータをレルムデータベースにロードするために、できるだけ明確な手順を実行してください。
この関数openRealm
をAppDelegateに実装し、で呼び出します
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
...
openRealm()
return true
}
func openRealm() {
let defaultRealmPath = Realm.defaultPath
let bundleReamPath = NSBundle.mainBundle().resourcePath?.stringByAppendingPathComponent("default.realm")
if !NSFileManager.defaultManager().fileExistsAtPath(defaultRealmPath) {
NSFileManager.defaultManager().copyItemAtPath(bundleReamPath!, toPath: defaultRealmPath, error: nil)
}
}
アプリにバンドルしたレルムファイルがまだ存在しない場合は、デフォルトのレルムパスにコピーされます。その後、以前と同じように通常どおりレルムを使用します。
Swift で説明した移行の例もあります。
Swift 3.0.1では、これを好むかもしれません:
let defaultRealmPath = Realm.Configuration.defaultConfiguration.fileURL!
let bundleRealmPath = Bundle.main.url(forResource: "seeds", withExtension: "realm")
if !FileManager.default.fileExists(atPath: defaultRealmPath.absoluteString) {
do {
try FileManager.default.copyItem(at: bundleRealmPath!, to: defaultRealmPath)
} catch let error {
print("error copying seeds: \(error)")
}
}
(ただし、オプションには注意してください)
そして、Objective-cで@pteofilの答えが必要な人のために
- (void)openRealm {
NSString *defaultRealmPath = [RLMRealm defaultRealm].path;
NSString *bundleRealmPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"default.realm"];
if(![[NSFileManager defaultManager] fileExistsAtPath:defaultRealmPath]) {
[[NSFileManager defaultManager] copyItemAtPath:bundleRealmPath toPath:defaultRealmPath error:nil];
}
}
Swiftバージョン3、提供: Kishikawa Katsumi :
let defaultRealmPath = Realm.Configuration.defaultConfiguration.fileURL!
let bundleReamPath = Bundle.main.path(forResource: "default", ofType:"realm")
if !FileManager.default.fileExists(atPath: defaultRealmPath.path) {
do
{
try FileManager.default.copyItem(atPath: bundleReamPath!, toPath: defaultRealmPath.path)
}
catch let error as NSError {
// Catch fires here, with an NSError being thrown
print("error occurred, here are the details:\n \(error)")
}
}
@pteofilのopenRealm関数をSwift 2.2/Realm 1.0.2:
func openRealm() {
let defaultURL = Realm.Configuration.defaultConfiguration.fileURL!
let bundleReamPath = NSBundle.mainBundle().URLForResource("default", withExtension: "realm")
if !NSFileManager.defaultManager().fileExistsAtPath(defaultURL.path!) {
do {
try NSFileManager.defaultManager().copyItemAtURL(bundleReamPath!, toURL: defaultURL)
}
catch {}
}
}
バンドルの場所から直接開き、デフォルトのレルムパスにコピーする必要がない場合は、実装を確認してください ここ
エンタープライズスペースで作業する場合、すべてのアプリケーションでレルムを再利用せずに各アプリケーションのレルムを開く必要があるため、これをSwift 3.0にまとめます。この関数をAppDelegateに追加します。
func openRealm()
{
let appName = "ApplcationNameGoesHere"
var rlmConfig = Realm.Configuration()
let defaultRealmPath = Realm.Configuration.defaultConfiguration.fileURL!
let appRealmPath = defaultRealmPath.deletingLastPathComponent().appendingPathComponent("\(appName).realm")
if !FileManager.default.fileExists(atPath: appRealmPath.path) {
// Use the default directory, but replace the filename with the application name: appName
rlmConfig.fileURL = rlmConfig.fileURL!.deletingLastPathComponent().appendingPathComponent("\(appName).realm")
}else
{
rlmConfig.fileURL = appRealmPath
}
// Set this as the configuration used for the default Realm
Realm.Configuration.defaultConfiguration = rlmConfig
}// open the Realm database for the application
上記のコードは、この例のappName変数に基づいて、ファイル名が「ApplicationNameGoesHere.realm」のレルムを開くか作成します。
場所
openRealm() before return true in application: didFinishLaunchingWithOptions
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
openRealm()
return true
}
このような別のクラスでそれを呼び出します:
let uiRealm = try! Realm()
システムにRealmStudioをダウンロードします。次に、Xcodeからパスを出力してコピーします。
print(Realm.Configuration.defaultConfiguration.fileURL!)
次に、ターミナルを開いて次のように記述します。
open //file path
Realm Studioでファイルが開き、そこでモデルデータを確認できます。