gpt4 book ai didi

xamarin - 从 Xamarin 捆绑预构建的 Realm 文件

转载 作者:行者123 更新时间:2023-12-04 09:13:52 24 4
gpt4 key购买 nike

我看过一些 SO 帖子,详细说明了如何将预构建的 Realm 文件与 iOS (Obj-c/swift) 和 Android (Java) 捆绑在一起,但我找不到任何关于从 PCL 或共享项目中捆绑 Xamarin 的信息;这可能吗?

我相信由于文件在每个平台上的分布方式的细微差别,它需要一个每个项目的 *.realm 文件(例如,在编译时从单个源复制),但这是能够访问预构建的一个很小的代价来自两个平台上共享代码的数据。

我的目标是在首次启动应用程序时避免初始下载过程。

最佳答案

您可以添加预先填充的 .realm数据库作为资源(BundleResource 构建操作)和 Android Assets 目录的原始 Assets (AndroidAsset 构建操作)添加到您的应用程序 iOS 包中。
使用 Xamarin.Forms基于 Journal来自 Realm 的示例,您可以将填充的数据库作为链接项添加到每个 native 项目,并在应用程序启动时复制它。
例子:
在您 Xamarin.Form 的 iOS“ native ”项目中解决方案/应用程序,更新 FinishedLaunching如果用户数据库这样做,则复制预先填充的数据库的方法 不是 存在(即这是应用程序第一次运行):

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
var prepopulated = "prepopulated.realm";
var realmDB = "journal.realm";
var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
if (!File.Exists(Path.Combine(documentsPath, realmDB)))
{
File.Copy(prepopulated, Path.Combine(documentsPath, realmDB));
}
global::Xamarin.Forms.Forms.Init();
LoadApplication(new App());
return base.FinishedLaunching(app, options);
}
注意:同样的技术可以用在你的其他“原生”项目中
注意:自定义编写的 Xamarin.Forms依赖服务是这样做的替代方法,但结果是相同的
由于我们正在复制 prepopulated.realmjournal.realm在应用程序文档目录中,我们可以告诉 Realm 打开这个数据库而不是创建/使用 default.realm一。
Xamarin.Form期刊项目 JournalEntriesViewModel.cs ,更新代码打开这个 journal.realm
public JournalEntriesViewModel()
{
_realm = Realm.GetInstance("journal.realm");
Entries = _realm.All<JournalEntry>();
AddEntryCommand = new Command(AddEntry);
DeleteEntryCommand = new Command<JournalEntry>(DeleteEntry);
}
链接到不同“ native ”项目的解决方案中相同的预填充数据库:
enter image description here

关于xamarin - 从 Xamarin 捆绑预构建的 Realm 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37498138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com