Создать или обновить функцию фреймворка области, не работающую в iOS

Я использую инфраструктуру Realm для iOS и пытаюсь создать несколько объектов в массиве из запроса на синтаксический анализ, но контролирую, чтобы в локальной области не было повторяющихся объектов.

let lastSyncDate = NSUserDefaults.standardUserDefaults().objectForKey("com.fridge.sync.last") as NSDate
let query = PFQuery(className: "Category", predicate: NSPredicate(format: "updatedAt > %@", lastSyncDate))
query.findObjectsInBackgroundWithBlock { (results, error) -> Void in
  if error != nil {
    return
  }
  if results.isEmpty {
    return
  }
  let realm = RLMRealm.defaultRealm()
  /*realm.transactionWithBlock({ () -> Void in
    for remoteCategory in results as [PFObject] {
      let category = Category()
      category.name = remoteCategory["name"] as String
      category.image = NSData()
      realm.addObject(category)
    }
  })*/
  /*realm.beginWriteTransaction()
  for remoteCategory in results as [PFObject] {
    let category = Category()
    category.name = remoteCategory["name"] as String
    category.image = NSData()
    realm.addObject(category)
  }
  realm.commitWriteTransaction()*/
}

Я также использовал версию Creatorupdate, но она по-прежнему не сохраняет объекты, и по какой-то причине я не могу отладить что-либо из того, что происходит внутри кода области.

Категорийная модель выглядит следующим образом:

class Category: RLMObject {
  dynamic var categoryId: String = ""
  dynamic var name: String = ""
  dynamic var image: NSData = NSData()
  var stores: [Store] {
    return linkingObjectsOfClass(Store.className(), forProperty: "category") as [Store]
  }

  override class func primaryKey() -> String {
    return "categoryId"
  }
}

Любая идея о том, что может пойти не так, приветствуется. заранее спасибо


person Jake Ortiz    schedule 23.11.2014    source источник


Ответы (1)


Не похоже, что вы устанавливаете свойство categoryID для своих объектов. Это приведет к тому, что все они будут использовать один и тот же первичный ключ и перезаписывать один и тот же объект при использовании createOrUpdate.

Для отладки и перехода к коду Realm вам, вероятно, потребуется выполнить сборку из исходного кода.

person Ari    schedule 24.11.2014
comment
Хорошо, это сработало, как вы упомянули, большое спасибо. Что вы имели в виду под сборкой из исходников? - person Jake Ortiz; 25.11.2014
comment
Realm имеет открытый исходный код, и если вы создадите фреймворк самостоятельно, вам будет легче отлаживать код Realm. Исходный код Realm доступен здесь: github.com/realm/realm-cocoa - person Ari; 25.11.2014