我有这个型号:
enum PhotoState: String {
case New = "New"
case Downloaded = "Downloaded"
case Failed = "Failed"
}
class Photo: RLMObject {
dynamic var id = 0
dynamic var name = ""
dynamic var imageURLString = ""
var state = PhotoState.New
override class func primaryKey() -> String! {
return "id"
}
override class func ignoredProperties() -> [AnyObject]! {
return ["state"]
}
}
我在表格视图中提出这个问题:
override func viewDidLoad() {
super.viewDidLoad()
photos = Photo.allObjects()
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// Return the number of rows in the section.
if let count = photos?.count {
return Int(count)
}
return 0
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if let photo = photos?.objectAtIndex(UInt(indexPath.row)) as? Photo {
downloadPhoto(photo, indexPath: indexPath)
}
}
func downloadPhoto(photo: Photo, indexPath: NSIndexPath) {
// Fake Download
switch photo.imageURLString.lastPathComponent {
case "7.png":
photo.state = .Failed
default:
photo.state = .Downloaded
}
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
}
如果我点击一行,该行应该更新并具有新状态,但是照片记录的状态属性又回到了。新的。
RLMResult的objectForIndex是否初始化了一个新的模型实例?
答案 0 :(得分:3)
每当一个对象存储在Realm中时,只有那些不被忽略的属性"再次存储和检索。每当你从Realm获得对象时,"被忽略"属性只会出现默认值。
所以使用"忽略"当你例如属性时,属性最有用。有一个独立的对象,最初在Realm之外使用。然后,当您想要将其添加到Realm时,您希望不存储某些属性。
领域对象的属性不存储在对象本身中。它们直接在数据库中检索/存储,对象只是作为代理。