我试图根据查询从Realm.io数据库中删除最后一个Object,如下所示:
Realm realm = Realm.getInstance(this);
final RealmResults<RealmCustomLocation> databaseLocations = realm.where(RealmCustomLocation.class).findAllSorted("timeStamp", RealmResults.SORT_ORDER_DESCENDING);
if(databaseLocations.size() >= 4){
realm.beginTransaction();
databaseLocations.removeLast();
realm.commitTransaction();
}
Run Code Online (Sandbox Code Playgroud)
realm.beginTransaction();
result.removeLast();
realm.commitTransaction()
Run Code Online (Sandbox Code Playgroud)
但是当我执行代码时,它总是以RealmException中断
io.realm.exceptions.RealmException: Removing object is not supported.
Run Code Online (Sandbox Code Playgroud)
然后我查看了RealmResults.java的源代码,我发现了这个:
所以难怪它一直崩溃,removeLast()什么都不做,只抛出一个错误!
所以我的问题是:如何从数据库中删除对象呢?!
我在Android上使用realm.io 0.77(编译'io.realm:realm-android:0.77.0').
感谢您对此的帮助!
如何限制Realm返回的对象数量?.findAll返回与查询匹配的所有行,而.findFirst仅返回第一行.但是像1000年前的那样呢?.findAll可能会返回如此多的行,以至于它消耗的内存过多.
我想在后台线程上获取大量对象,但是我无法将它们传递给主线程,就像我得到的那样
*** Terminating app due to uncaught exception 'RLMException', reason: 'Realm accessed from incorrect thread'
Run Code Online (Sandbox Code Playgroud)
获取代码
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
//Background Thread
RLMRealm * realm = [RLMRealm defaultRealm];
self.allObjectsRLMResult = [MyClass allObjectsInRealm:realm];
dispatch_async(dispatch_get_main_queue(), ^(void){
// use self.allObjects and do stuff on main thread
});
});
Run Code Online (Sandbox Code Playgroud)
如何在后台执行提取并将对象传递给主线程,因此对性能影响最小
我可以获得主键,然后在主线程上重新获取,但这将是相同的性能(可能甚至更慢)直接获取它们
通过继承,可以很容易地将Realm与类一起使用Object.但是如何struct在Swift中保存包含几个字段的域?例如
struct DataModel {
var id = 0
var test = "test"
}
Run Code Online (Sandbox Code Playgroud)
我知道文档很清楚支持的类型.但也许有一个很好的解决方法或 - 甚至更好 - 来自领域的人可以写关于结构的未来计划.
我正在使用领域来存储和检索数据.通常当我们打开一个领域来存储一些我们喜欢的数据时:
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
// Copy the object to Realm
realm.copyToRealm(myObject);
realm.commitTransaction();
realm.close();
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我正在关闭这个领域.
但是当我检索一些数据时:
RealmResults<MyClass> results = Realm.getDefaultInstance().where(MyClass.class).findAll();
Run Code Online (Sandbox Code Playgroud)
我如何关闭这个领域?是否需要关闭?
有没有一种方法,当我从Realm读取一个对象,它可以成为一个独立或非托管对象?在EF中,这称为无跟踪.这种情况的用法是,当我想要在持久数据存储上更新数据对象之前,在数据对象上实现更多业务逻辑.我可能想要将RealmObject提供给ViewModel,但是当从ViewModel返回更改时,我想将断开连接的对象与数据存储区中的对象进行比较以确定更改的内容,因此如果有一种方法可以断开连接当我将它提供给ViewModel时,Realm中的对象,然后我可以更好地管理已更改的属性,使用我的业务逻辑来执行我需要的操作,然后将更改保存回领域.
我知道Realm做了很多魔术,很多人都不想添加这样的图层但是在我的应用程序中,我真的不能直接更新数据存储区,除非有一个事件被提出我也可以订阅然后以这种方式附加我的业务逻辑.
我只看到一个事件,似乎没有执行此操作.
谢谢你的协助.
在Realm,为了能够持久化对象,它必须实现RealmModel或扩展RealmObject.使用一个比另一个好吗?
它在领域文档中所说的全部是:
扩展RealmObject基类的另一种方法是实现RealmModel接口并添加@RealmClass注释.
然后,可以通过静态方法获得RealmObject上可用的所有方法.
我正在尝试实现以下方案,但我正面临着这个问题
class CommentsModel: Object {
dynamic var commentId = ""
dynamic var ownerId: UserModel?
dynamic var treeLevel = 0
dynamic var message = ""
dynamic var modifiedTs = NSDate()
dynamic var createdTs = NSDate()
//facing issue here
dynamic var childComments = List<CommentsModel>()
}
Run Code Online (Sandbox Code Playgroud)
我有一个注释模型,它具有非可选属性,其中childComments是相同注释模型类的List.在此我宣布dynamic var childComments = List<CommentsModel>()
它显示我无法将属性标记为动态,因为其类型无法在Objective-C中表示.
请帮我解决如何达到我的要求
我正在尝试在新的Xcode 9测试版中运行我当前的项目,但是当我这样做时它会说Module compiled with Swift 3.1 cannot be imported in Swift 4.0.我怎么解决这个问题?我不是在使用cocoapods.
我正在尝试使用Carthage将Realm安装到我的项目中.它以前工作但切换到新的MacBook Pro(15英寸,2018年,TouchBar)后,我收到以下错误,
carthage update --no-use-binaries --platform iOS
*** Fetching realm-cocoa
*** Checking out realm-cocoa at "v3.13.0"
*** xcodebuild output can be found in /var/folders/m4/1z0tvn6d67q2rqwcjvndy80m0000gn/T/carthage-xcodebuild.2vfx4v.log
*** Building scheme "Realm" in Realm.xcworkspace
Could not find any available simulators for iOS
Run Code Online (Sandbox Code Playgroud)
我尝试卸载并重新安装Carthage(0.31.2)并按照这些答案中给出的步骤进行操作,
xcrun simctl list devices --json
{
"availability" : "(available)",
"state" : "Shutdown",
"isAvailable" : true,
"name" : "iPad Pro",
"udid" : "94790E33-EA0A-40B4-BA0A-19CC8D976A6F",
"availabilityError" : ""
}
Run Code Online (Sandbox Code Playgroud)
调试迦太基
(lldb) po devices[latestOSName]?.first { $0.isAvailable }
? Optional<Simulator>
? some : …Run Code Online (Sandbox Code Playgroud) realm ×10
android ×4
swift ×4
ios ×2
xcode ×2
carthage ×1
cocoa-touch ×1
database ×1
java ×1
objective-c ×1
swift4 ×1
xamarin ×1
xcode10.1 ×1
xcode9-beta ×1