관리 된 Avatar
클래스와 관리되는 User
클래스가 있습니다. User
클래스는 Avatar
클래스에 대한 참조가 있습니다Realm addOrUpdateObject로 인해 등록 정보가 nil로 설정되는 이유는 무엇입니까?
@interface User : RLMObject
...
@property (nonatomic, retain) Avatar *avatar;
...
Avatar
클래스는 다음과 같습니다
@interface Avatar : RLMObject
@property (nonatomic, retain) NSString *urlStr;
@property (nonatomic, retain) NSData *imageData;
@end
@implementation Avatar
+ (NSString *)primaryKey {
return @"urlStr";
}
+ (NSArray *)requiredProperties {
return @[@"urlStr", @"imageData"];
}
@end
는 I의 한 새로운 사용자 가져온 경우 (예를 들어 서버에서)있다 하지만 아바타를 다시 다운로드하지 않으려면 대신 데이터베이스에서 기존 아바타를 가져오고 싶습니다. 간단하지만 db에서 [Avatar objectWithPrimaryKey]
을 사용하여 기존 Avatar
참조를 가져온 후 User
에 아바타 속성으로 설정 한 다음 을 호출하면 avatar
속성이 nil로 설정됩니다. 예외가 발생하지 않거나 디버그 로그가 없으면 속성은 0이 아닌 값에서 nil 값으로 변경됩니다. Avatar
테이블이 여전히 채워지지만 User
참조가 db에서 비어 있는지 확인하십시오.
코드의 일부 :
현존하는 아바타 점검 :
if let avatarURLStr = user.avatarURLStr, let avatarURL = URL(string: avatarURLStr) {
if let dbAvatar = Avatar(forPrimaryKey: avatarURLStr) {
let newAvatar = Avatar(urlStr: dbAvatar.urlStr, imageData: dbAvatar.imageData)
user.avatar = newAvatar
} else {
if let data = NSData(contentsOf: avatarURL) {
let avatar = Avatar(urlStr: avatarURLStr, imageData: data as Data!)
user.avatar = avatar
}
}
}
DB를에 사용자 추가 : 나는 Objective-에 대한 영역 2.1.1에있어
let realm = RLMRealm.default()
realm.beginWriteTransaction()
// user.avatar is non-nil here
realm.addOrUpdate(user)
// user.avatar is nil here
try? realm.commitWriteTransaction()
을 C (그러나 프로젝트는 Swift와 Obj-C를 모두 사용함).
또한 관리 객체를 참조하는 관리되지 않는 객체를 addOrUpdate해도 괜찮은지 궁금합니다. 나는 실제로 관리되지 않고 addOrUpating하는 새로운 Avatar 객체를 만들려고 시도했지만, 똑같은 문제가 발생합니다. –