だから、ここに私の問題があります:
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
}
}
}
}
}