0

だから、ここに私の問題があります:

iOS のレルムのローカル パスは、ドキュメント ディレクトリにあります。私はそれらを開くことができます:

let realm = try! Realm()

同期レルムを開くのは、URL https://realm.io/docs/swift/latest/#realmsによって配置されているため異なります。

Results<Object>起動時にRealmに書き込むことにより、別のファイルからAppDelegateで呼び出されるデフォルトデータをレンダリングできるUICollectionViewがあります

別ファイル

class SetUpData {

// MARK: - Seed Realm

static func defaults() {

    let realm = try! Realm()

    guard realm.isEmpty else { return }

    try! realm.write {
        realm.add(List.self())
        }
    }
}

アプリ デリゲート

class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

     // MARK: - Set Up Realm If Deleted

    var config = Realm.Configuration()
    config.deleteRealmIfMigrationNeeded = true

    Realm.Configuration.defaultConfiguration = config

    SetUpData.defaults()

    return true
}

ここから、クライアント側 (iOS) でログインに成功し (自分でログインしましたが、値は Realm Object Server (ROS) 管理者ユーザーに対応しています)、デフォルト値を取得しList.cellて「リスト」の書き込みを開始できます。私のアプリケーションに。

ただし、同期されたレルムを開くSync Configurationパーでレルムを構成すると、オブジェクトサーバーに認証され、そのレルムを開く権限があるユーザーが必要になるためcellForItemAtIndexPath return lists.count 致命的なエラーで合理的にクラッシュします。返す初期データはありません。

それは理にかなっている。しかし、私は何をしますか?

デフォルト設定で Realm ファイルを作成し、それをサーバーに移行する必要がありますか? 以下のコードを使用して、設定を App Delegate の Sync オブジェクトに変更しようとしました (これは で使用しているものですListViewController)。サイコロはありません。

private func setUpRealm() {

    let username = "\(LoginViewController().username.text!)"
    let password = "\(LoginViewController().password.text!)"

    SyncUser.logIn(with: SyncCredentials.usernamePassword(username: username, password: password, register: true), server: URL(string: "http://000.000.000.000:9080")!) { (user, error) in

        guard let user = user else {
            fatalError(String(describing: error))
        }

        DispatchQueue.main.async {
            let configuration = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: URL(string: "realm://000.000.000.000:9080/~/realmList")!))

                    let realm = try! Realm(configuration: configuration)
                    self.lists = realm.objects(List.self).sorted(byKeyPath: "created", ascending: false)
                    self.notificationToken = self.lists.addNotificationBlock { [weak self] (changes: RealmCollectionChange) in

                        guard (self?.collectionView) != nil else { return }

                        switch changes {
                        case .initial:
                            self?.collectionView.reloadData()
                            break

                        case .update(_, let deletions, let insertions, let modifications):
                            self?.collectionView.performBatchUpdates({
                                self?.collectionView.insertItems(at: insertions.map({ IndexPath(row: $0, section: 0)}))
                                self?.collectionView.deleteItems(at: deletions.map({ IndexPath(row: $0, section: 0)}))
                                self?.collectionView.reloadItems(at: modifications.map({ IndexPath(row: $0, section: 0)}))
                            }, completion: nil)
                            break

                        case .error(let error):
                            print(error.localizedDescription)
                            break
                        }
                    }
                }
            }
        }
4

1 に答える 1