我一直在升级项目以使用Realm作为持久性存储,我无法在我的某个模型中找到有关如何使用字符串数组的任何文档.
RLMObject的Array实现是使用RLMArray,其中T继承RLMObject
我可以创建一个继承..属性的对象,其中包含字符串......但这似乎是替换NSArray字符串的一些开销.
有没有人知道推荐的最佳做法?
我需要Realm在android 中的数据库中添加自动增量键字段.我怎样才能做到这一点?这可能吗?
提前致谢.
我正在使用Realm for Swift 1.2,我想知道如何为实体实现复合主键.
因此,您可以通过覆盖来指定主键 primaryKey()
override static func primaryKey() -> String? { // <--- only 1 field
return "id"
}
Run Code Online (Sandbox Code Playgroud)
我能看到的唯一方法就是创建另一个复合属性
var key1 = "unique thing"
var key2 = 123012
lazy var key: String? = {
return "\(self.key1)\(self.key2)"
}()
override static func primaryKey() -> String? {
return "key"
}
Run Code Online (Sandbox Code Playgroud)
你如何在Realm中正确提供复合键?
我想将android应用程序与服务器同步.在服务器中,我通过触发器维护了上次更新日期,因为它使用SQL服务器,但我的Android应用程序使用Realm,因此无论何时插入或更新任何行,如何在字段中设置当前日期时间.任何建议都将受到高度赞赏.
我正在使用最新的Xcode 7.1,我的项目使用Swift 2.1.我按照Swift网站上的所有指示开始(动态框架选项卡),一切都很好,直到我尝试import RealmSwift上课.编译器在我尝试导入RealmSwift的行上抛出以下错误:
error: module file was created by an older version of the compiler; rebuild 'RealmSwift' and try again: /Users/USERNAME/Desktop/iosDev/PROJECTNAME/RealmSwift.framework/Modules/RealmSwift.swiftmodule/x86_64.swiftmodule
Run Code Online (Sandbox Code Playgroud)
所有文件都在${PROJECT_DIR}根目录(RealmSwift.framework和Realm.framework)中.
我搜索并搜索了一个答案,更新了Xcode,删除并重新配置了库.我不确定'重建RealmSwift'意味着什么(我是swift的新手).当我尝试在我的类中使用库或使用Xcode插件创建新的Realm模型对象时,只会抛出错误.
我最近通过尝试启动JavaCV的FFmpegFrameGrabber实例来获得以下错误:
java.lang.UnsatisfiedLinkError: org.bytedeco.javacpp.avutil
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at org.bytedeco.javacpp.Loader.load(Loader.java:413)
at org.bytedeco.javacpp.Loader.load(Loader.java:381)
at org.bytedeco.javacpp.avformat$AVFormatContext.<clinit>(avformat.java:2597)
at org.bytedeco.javacv.FFmpegFrameGrabber.startUnsafe(FFmpegFrameGrabber.java:386)
at org.bytedeco.javacv.FFmpegFrameGrabber.start(FFmpegFrameGrabber.java:380)...
Run Code Online (Sandbox Code Playgroud)
虽然存在这个问题的解决方案,但没有一个对我有用.
经过多次试验,我发现奇怪的是,如果我在项目中不包含Realm,我就不会再收到此错误.
这是我的build.gradle文件的一部分,其中包含所有这些库:
compile group: 'org.bytedeco', name: 'javacv', version: '1.1'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.0.0-1.1', classifier: 'android-arm'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.0.0-1.1', classifier: 'android-x86'
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.8.1-1.1', classifier: 'android-arm'
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.8.1-1.1', classifier: 'android-x86'
// ORM
compile 'io.realm:realm-android:0.87.2' // Tested NOT OK - Causes JavaCV to crash
//
Run Code Online (Sandbox Code Playgroud)
我在想,这个问题可能有一个我不知道的解决方案.我发现网上任何地方都没有提到库不兼容或者为什么会出现这种情况.
我将使用任何人可能需要的任何其他详细信息来编辑此帖子. …
首先,我正在检查self.statisticsArray.count == 0我是否创建了新记录,否则我正在更新现有值.当我创建一个新对象时,一切正常,但是当我尝试更新存在的对象时,它会在下一个错误时崩溃:
Attempting to modify object outside of a write transaction - call beginWriteTransaction on an RLMRealm instance first
Run Code Online (Sandbox Code Playgroud)
但我在一个.write区块内完成所有这一切,为什么会出现这样的错误?我读过如果我使用.write(),那么我不需要关闭交易.任何人都可以形容我崩溃的原因吗?
if self.statisticsArray.count == 0 {
self.statistics.summary = 250
try! self.realm.write({
self.realm.add(self.statistics)
self.realm.add(record)
})
} else {
if day == self.statisticsArray.last?.date {
try! self.realm.write({
self.realm.objects(Statistics).last?.summary += 250
self.realm.add(record)
})
} else {
try! self.realm.write({
self.statistics.summary = (self.statisticsArray.last?.summary)! + 250
self.realm.add(self.statistics)
self.realm.add(record)
})
}
}
Run Code Online (Sandbox Code Playgroud) 我们有一个简单的类Person,它来自领域Object.现在我们希望该子类符合Equatable协议.非常简单的代码看起来像这样.
class Person: Object, Equatable {
dynamic var localID = "0"
dynamic var name:String?
}
func ==(lhs: Person, rhs: Person) -> Bool {
return lhs.localID == rhs.localID
}
Run Code Online (Sandbox Code Playgroud)
我们从领域版本0.98.8开始,一切都按预期工作.当我们更新到版本0.102.0(以及其他版本之间)时,会出现编译器错误消息
Error: Redundant conformance of ‚Person‘ to protocol ‚Equatable‘
Run Code Online (Sandbox Code Playgroud)
不够奇怪,如果降级回版本0.98.8,错误仍然存在.另一个奇怪的行为,在我们的一个开发者机器上,相同的代码编译得很好.
经过一些研究,我们不知道发生了什么,以及如何解决或解决这个问题.
我在Application对象上使用一个静态全局Realm实例(从不关闭)仅用于UI Thread,
@UiThread
public static Realm getRealm() {
if (Thread.currentThread() == Looper.getMainLooper().getThread()) {
return realmInstance;
} else {
Timber.e("Illegal access to getRealmObservable");
throw new IllegalStateException("Only UI Thread can access this realm");
}
}
Run Code Online (Sandbox Code Playgroud)
而另一个单独使用的Workermhread域如下:
@WorkerThread
public static void executeOnSingleUseRealm(final Realm.Transaction transaction) {
if (Thread.currentThread() == Looper.getMainLooper().getThread()) {
Timber.e("Wrong thread for Realm");
throw new IllegalStateException("Wrong thread for Single use Realm");
}
Realm realm = null;
try {
realm = Realm.getDefaultInstance();
realm.executeTransaction(transaction);
} catch (Exception e) {
Timber.e(e, "Exception in Single Use …Run Code Online (Sandbox Code Playgroud) 我从realm studio下载了realm-studio-1.20.0-x86_64.AppImage.如何安装此映像以便在我的个人计算机上浏览加密的域移动数据库,该数据库可以从模拟器或真实设备导出或提取.
注意:我不想对chrome使用stetho插件,因为它不支持加密域移动数据库浏览.