2016-02-29 2 views
0

Я хочу обновить несколько атрибутов сущности с помощью Swift, но не смог найти учебник для управления этим. Я сумел обновить одного атрибута объекта с кодом ниже:Как обновить атрибут нескольких основных данных в swift 2

//Insert Function 
func Insert(dbname : String , attributeName : String , value : String) { 
    let check_empty = entityIsEmpty(dbname) 
    if(check_empty != true){ 

    let saveData = NSEntityDescription.insertNewObjectForEntityForName(dbname, inManagedObjectContext: managedContext) 

    // add our data 
    saveData.setValue(value, forKey: attributeName) 

    //2 
    do { 
     try managedContext.save() 
     //3 
     check_DB.append(saveData) 

    } catch let error as NSError { 
     print("Could not save \(error), \(error.userInfo)") 
    } 

    //check_empty 
}else{ 
     //Update procedure 
     let fetchRequest = NSFetchRequest(entityName: dbname) 

     do { 
      let fetchedEntities = try self.managedContext.executeFetchRequest(fetchRequest) as! [SettingInfo] 
      fetchedEntities.first?.attributeName = value 

      // ... Update additional properties with new values 
     } catch { 
      // Do something in response to error condition 
     } 

     do { 
      try self.managedContext.save() 

     } catch { 
      // Do something in response to error condition 
     } 

} 

}

, но как я могу обновить несколько атрибутов объекта? , например: Название объекта является: dbname имя Атрибут является: attribute _name и значение атрибута, которое я хочу обновить это: value

UPDATE: сообщение ошибка: enter image description here

Моя структура базы данных: enter image description here

+0

Просто обновите другие атрибуты точно так же, как вы сделали первым. В чем проблема? Вместо того, чтобы извлекать объект, обновлять и сохранять в одной функции, есть функция, которая возвращает объект, обновляет все атрибуты, а затем сохраняет его в другой функции. – Paulw11

+0

моя проблема заключается в том, что эта функция не распознает имя dbname и его атрибуты, так как вы могут видеть, что они являются аргументами функции, если я ставлю их постоянными, это работает. прямо сейчас с приведенным выше кодом i get error of dbname не является типом и не распознает имя атрибута – anonymox

+0

@ Paulw11 вы предлагаете иметь 3 функции для выполнения этой работы? каждый делает одну операцию? – anonymox

ответ

0

вы можете использовать шпоночный доступ к NSManagedEntities, так что вы можете сказать

if let entity = fetchedEntities.first { 
    entity[attribute_name]=value 
} 
+0

Вы не можете использовать 'as [dbname]', потому что 'dbname' - это переменная, содержащая ваше имя объекта. Запрос на выборку возвращает '[NSManagedObject]'. Ваше изображение не отображает подпись функции, поэтому я не могу сказать, что должен сказать вам код, но 'attribute_name' не является известной переменной, так что у вас есть в списке параметров функции? – Paulw11

+0

Спасибо за ответ, это то, что у меня есть в списке параметров функции: func update (dbname: string, attribute_name: string, value: string) – anonymox

+0

из этого 'attribute_name' выглядит правильно. _ уродливы и, возможно, у вас есть символ Юникода, если вы скопировали/вставляли его. Измените его на более традиционное 'attributeName' – Paulw11

0

Я решил свою проблему с помощью следующего кода:

//Update procedure 
       let fetchRequest = NSFetchRequest(entityName: dbname) 

       do { 
        let fetchedEntities = try self.managedContext.executeFetchRequest(fetchRequest) as! [SettingInfo] 
        let attribute = fetchedEntities[0] as NSManagedObject 
        attribute.setValue(value , forKey: attributeName) 

        // ... Update additional properties with new values 
       } catch { 
        // Do something in response to error condition 
       } 

       do { 
        try self.managedContext.save() 

       } catch { 
        // Do something in response to error condition 
       }