我看过一些SO文章,详细介绍了如何将预构建的Realm文件与iOS(Obj-c/swift)和Android(Java)捆绑在一起,但是我找不到任何关于从PCL或共享项目捆绑Xamarin的信息; 这可能吗?
我相信它需要一个每个项目*.realm文件(例如,在编译时从单个源复制),因为文件在每个平台中的分布方式很细微,但这是一个很小的代价,以便能够访问预构建来自两个平台上共享代码的数据.
我的目标是在第一次启动应用程序时避免初始下载过程.
Sus*_*ver 20
您可以将预先填充的.realm
数据库作为资源(BundleResource
Build Action)添加到应用程序iOS包中,并将其作为Android Asset目录的原始资产(AndroidAsset
Build Action)添加.
使用Realm中Xamarin.Forms
基于日期的Journal示例,您可以将填充的数据库作为链接项添加到每个本机项目,并在应用程序启动时复制它.
在你的iOS的"原生"项目Xamarin.Form
的解决方案/应用程序,更新的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);
}
Run Code Online (Sandbox Code Playgroud)
注意:您可以在其他"本机"项目中使用相同的技术
注意:自定义编写的Xamarin.Forms
依赖服务是以这种方式执行的替代方法,但结果是相同的
由于我们正在复制应用程序文档目录中的prepopulated.realm
to journal.realm
,我们可以告诉Realm打开此数据库而不是创建/使用一个数据库default.realm
.
在Xamarin.Form
Journal项目中JournalEntriesViewModel.cs
,更新代码以打开它journal.realm
public JournalEntriesViewModel()
{
_realm = Realm.GetInstance("journal.realm");
Entries = _realm.All<JournalEntry>();
AddEntryCommand = new Command(AddEntry);
DeleteEntryCommand = new Command<JournalEntry>(DeleteEntry);
}
Run Code Online (Sandbox Code Playgroud)
解决方案中的相同预先填充的数据库链接到不同的"本机"项目:
归档时间: |
|
查看次数: |
1892 次 |
最近记录: |