- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在没有我的 Realm 数据库时遇到了问题。我有这些对象:
// Person.h
@interface Person : RLMObject
//... property declarations
@property RLMArray<Dog *><Dog> *dogs;
@end
// Dog.h
@interface Dog : RLMObject
@property NSInteger id;
@property NSString *name;
@end
RLM_ARRAY_TYPE(Dog) // Defines an RLMArray<Dog> type
// Dog.m
@implementation Dog
+ (NSString *)primaryKey {
return @"id";
}
@end
当我这样做时,我会在 Person.dogs 中得到 2 个相同的对象
Person *jim = [[Person alloc] init];
Dog *rex = [[Dog alloc] init];
rex.id = 1;
rex.name = @"Rex";
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
[realm addObject:jim];
[realm commitWriteTransaction];
[realm beginWriteTransaction];
[jim.dogs addObject:rex];
[realm commitWriteTransaction];
[realm beginWriteTransaction];
[jim.dogs addObject:rex];
[realm commitWriteTransaction];
在这之后我将只有一个具有唯一主键的对象,我应该怎么做?我知道 RLMArray 只是一个数组,但我认为 Realm 很早就意识到一对多关系只有唯一的对象。
下面是 Realm 浏览器和 Xcode 调试区的截图
这里有 3 只狗,因为我的代码运行了 3 次,但这没关系,我可以用我的 Id 制作狗,但在这种情况下没关系
最佳答案
RLMArray
具有数组语义。它的行为不像一个只包含唯一对象的集合。这意味着您可以多次添加同一个对象。如果你想最后每种类型只有一个对象,你应该只添加每个类型的一个对象。
您发布的调试器的输出表明您运行了 3 次您的应用程序,但狗每次都有不同的 ID,因此它们作为不同的对象受到威胁。
如果您要使用 [Person createOrUpdateInRealm:realm withValue:jim];
,其中 jim
是一个 NSDictionary
或一个独立对象只有一只狗,狗的 ID 和人的 ID 等于您的 Realm 中保存的 ID,那么您最终仍然只有一个人和一只狗,并且它们的所有剩余属性都将具有更新的值。
关于ios - RLMArray 一对多关系中的重复对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34111906/
我有一个主 Realm 对象: @interface MasterRealmObject : RLMObject @property (nonatomic, strong) RLMArray *ret
想要一些方法来更新现有的关注者,如果不存在,请将其添加到数据库并将它们链接到用户,例如 GETS CRASH OVER append in write block,由于主键重复,此外,如果没有在 HK
@ Realm : 为什么我的 RLMArray 在运行时会给出不同的对象实例? 这就是我定义 RLMArray 的方式: @property RLMArray *images; 我添加/删除 Hou
我的模型: Conv.h #import #import "ConvText.h" @interface Conv : RLMObject @property NSInteger c_id; @pr
我在 RealmSwift 中遇到了一个非常奇怪的问题。我在名为 Device 的 Realm 对象类中具有以下属性。 class Device: Object { .... dyna
我在没有我的 Realm 数据库时遇到了问题。我有这些对象: // Person.h @interface Person : RLMObject //... property declarations
我一直在测试用对象反转 RLMArray 顺序的可能性。我知道我可以将对象添加到 NSArray,然后将 reverseObjectEnumerator 添加到该数组,但我想继续使用 RLMarray
我正在尝试使用 rlmarray 创建 rlmobject 作为元素之一,但无法让它工作。 声明: dynamic var contactInfo : RLMArray = RLMArray(obj
我想用一种方法收集一些数据。 RLMArray 将用作一对多关系,例如菜单.菜肴 + (RLMArray *)parseDishesFromDictionary:(NSDictionary *)res
当声明一个 RLMArray 时,第二组括号的意义是什么? Realm 是我见过的唯一用过的地方。 @property NSArray *dictionaries; // I understand
我正在寻找一些有效(或至少不那么复杂)的方法来确定 and Object 是否包含在另一个对象的 RLMArray 属性中。 如果您查看 Realm 文档,就会发现关于 Inverse relatio
强制 RLMArray 支持 NSFastEnumerationIterator 的最佳方式是什么? internal override func buildEntryFromResultObject
我有一个内置了 Realm 和 CloudKit 的应用程序。该应用程序从 CloudKit 容器中获取数据,然后将其添加到 Realm。不过,两次提取中的一次具有一些链接的 Realm 模型,这就是
我需要区分 Class1 和 Class2。当然,我可以获得第一个对象并执行 isKindOfClass: 但这似乎有点草率。 @property RLMArray *arr1; @property
我将如何获取 RLMArray 并对其进行洗牌,以便 RLMArray 中的当前项目是随机的。 我已经查看了 RLMArray 的文档,但是我没有看到对其进行洗牌的好方法。 最佳答案 你最好的选择可能
我有一个相当简单明了的问题,我想用 Realm 来解决。我的对象上有一个数组属性(线程)。当我通过我们的 API 获取所有线程时,它们都被保存到 Realm 中,因为父对象是单独保存的,因此数组属性中
注意:我对 Realm 和 Swift 还很陌生,所以请原谅我不明白的任何显而易见的事情。 我有一个工作的 UITableView,我计划用任务填充它。我希望用户能够根据需要添加和删除任务,所以我不能
如何在removeAllObjects中使用RLMArray? 我收到'RLMException', reason: 'Attempting to mutate a readOnly RLMArray
我在 iOS Realm DB 中创建了简单的关系数据库(如存在于其他数据库中)模型。我创建了 2 个单独的 Realm 模型(表)用户 ID 以及其他详细信息和一个愿望 list ,其中用户使用 R
我有类Country。它是 RLMObject 的一个简单子(monad)类。基本上,当我保存 Country 时,它们确实有 regions (RLMArray 类型的属性包含几个 Region 类
我是一名优秀的程序员,十分优秀!