2017-02-08 15 views
0

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

Чтобы retrive ...

func getTranscriptions18CW() { 

    let fetchRequest: NSFetchRequest<TextInputs> = TextInputs.fetchRequest() 
    do { 
     //go get the results 
     let searchResults18CW = try getContext().fetch(fetchRequest) 

     if indexPageSum == 18 { 
      for trans in searchResults18CW as [NSManagedObject] { 
       let result = trans.value(forKey: "cWeight") 
       if result != nil { 

        CWeight.text = result! as? String 
       } 
      } 
     } 
    }catch { 
     print("Error with request: \(error)") 
    } 
} 

затем Сохранить.

func getContext() -> NSManagedObjectContext { 
    _ = UIApplication.shared.delegate as! AppDelegate 
    return DataController().managedObjectContext 
} 


func storeTranscription18CW (pageText: Double, textFileUrlString: String) { 


    let context = getContext() 

    //retrieve the entity that we just created 
    let entity = NSEntityDescription.entity(forEntityName: "TextInputs", in: context) 

    let transc = NSManagedObject(entity: entity!, insertInto: context) 

    // set the entity values 
    if indexPageSum == 18 { 
     transc.setValue(pageText, forKey: "cWeight") 
    } 
    //save the object 
    do { 
     try context.save() 
     print("saved!") 
    } catch let error as NSError { 
     print("Could not save \(error), \(error.userInfo)") 
    } catch { 

    } 
} 

затем другая часть для сохранения.

if indexPageSum == 18 { 
          let CWConvert = Double(CWeight.text!) 
          storeTranscription18CW(pageText: (CWConvert)!, textFileUrlString: "cWeight") 

ответ

0

Выражение:

result! as? String 

в основном означает, что "если result имеет тип String затем вернуть его, иначе вернуть nil". Это отлично работает для String s, хранящихся в БД, но назначает nilCWeight.text для чего-либо еще.

Вы хотите что-то вроде следующего:

if let result = trans.value(forKey: "cWeight") { 
    if let str = result as? String { 
     CWeight.text = str 
    } 
    else { 
     CWeight.text = "\(result)" 
    } 
} 

Это будет работать для наиболее распространенных типов данных. Выражение "\(result)" использует строчную интерполяцию для преобразования значения, хранящегося в result, в соответствующую строку.

Возможно, вы также захотите изучить подклассы NSManagedObject, чтобы упростить управление.

+0

Привет, спасибо за помощь, это сработало для первого, которое я хочу сохранить, но затем, когда я меняю их все (8) на одно и то же с разными именами, он сохраняет только последний номер в качестве номера остальное это 0 я думаю, что его отношение к этой части .... если indexPageSum == 18 { вар CWConvert = двойной (CWeight.text!) storeTranscription18CW (pageText: (CWConvert) !, textFileUrlString: "cWeight") CWConvert = Double (TWeight.text!) storeTranscription18TW (pageText: (CWConvert) !, textFileUrlString: «tWeight») –

+0

Можете ли вы опубликовать полный код где-нибудь доступным? Или поделиться им в частном порядке? Похоже, что здесь могут быть другие вещи. –

+0

Привет, я исправил эту проблему, спасибо –