SQLite DB에서받은 날짜를 Var로 Date
에 저장하는 데 문제가 있습니다. DB에서 오는 날짜를 ResultTask.AlarmDate
으로 저장하려고합니다. 그것을 String에서 Date로 변환합니다. 나는 시도하고 데이터의 벌금을 저장,하지만 난 알람없이 작업을 할 때 나는 아무 경보도 없다가 VAR 때 nil
을 저장할 원인 내가 오류가 ResultTask.AlarmDate?
에서 ?
삭제 및 기타 여러 시도변수가 주어진 항목을 저장하지 않습니다. - Swift 3
그것을 고치는 방법 그러나 아무것도 작동하지 않는다.
나는 모든 나는 내가 VAR에 저장하기 위해 노력하고있어 인쇄하지만, VAR는 여전히nil
때 표시되는 데이터의 원인, 문제 후 브레이크 포인트를 오른쪽으로 만들어 데이터를 볼 수
Console
을 사용하고 혼동있어 아래에 나와 있습니다.
노트
DB에서 데이터를 가져 오는 것은, 내가 목표 - C FM-데이터베이스 라이브러리를 사용하고 잘 작동하고, 결과는 아래의 Console
에서 볼 수 있다는 코드입니다. .toDate()
내가 사용 String
에 대한 확장이며 울부 짖는 소리와 같이이 코드는 AppDelegate.swift
이며, 그것을 잘 작동합니다.
Task
변수 유형은 내가 쉽게 작업에 Task.swift
파일에 만든 무언가이며, & 아래와 같이 잘 작동합니다.
기능 :
func GetTasks() -> [Task]{
var Tasks : [Task] = [Task]()
let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask, true)
let docsDir = dirPaths[0]
databasePath = (docsDir + "/" + "Tasks.db") as NSString
let TaskRecorderDB = FMDatabase(path: databasePath as String)
if (TaskRecorderDB?.open())! {
let querySQL = "Select * from 'Tasks' ORDER BY Priority DESC"
let results:FMResultSet? = TaskRecorderDB?.executeQuery(querySQL, withArgumentsIn: nil)
while results!.next() {
var ResultTask : Task! = Task()
ResultTask.ID = Int((results?.int(forColumn: "ID"))!)
ResultTask.FileName = results?.string(forColumn: "FileName")
ResultTask.Name = results?.string(forColumn: "Name")
ResultTask.Categorie = Int((results?.int(forColumn: "Categorie"))!)
ResultTask.Priority = Int((results?.int(forColumn: "Priority"))!)
ResultTask.AlarmDate? = (results?.string(forColumn: "Alarm").toDate())!
//Break point
ResultTask.Repeat? = (results?.string(forColumn: "Repeat"))!
ResultTask.Completed = Int((results?.int(forColumn: "Completed"))!).toBool()
if(ResultTask.Completed == false){
Tasks.append(ResultTask)
}
ResultTask = nil
}
TaskRecorderDB?.close()
} else {
print("Error #DB06: \(TaskRecorderDB?.lastErrorMessage())")
}
return Tasks
}
콘솔 :
(lldb) print (results?.string(forColumn: "Alarm").toDate())!
(Date) $R0 = 2016-11-23 17:21:00 UTC
(lldb) print ResultTask.AlarmDate
(Date?) $R1 = nil
(lldb)
AppDelegate.swift :
extension String {
func toDate() ->Date! {
var FinalDate : Date! = nil
if (self != ""){
let DateFormatter : Foundation.DateFormatter = Foundation.DateFormatter()
DateFormatter.locale = Locale.current
DateFormatter.dateFormat = "y-MM-dd_HH-mm-ss"
FinalDate = DateFormatter.date(from: self)!
}
return FinalDate
}
}
Task.swift : 사전에
import Foundation
class Task : NSObject {
var ID : Int! = nil
var FileName : String! = nil
var Name : String! = nil
var Categorie : Int! = nil
var Priority : Int! = nil
var AlarmDate : Date! = nil
var Repeat : String! = nil
var Expired : Bool! = nil
var Completed : Bool! = nil
}
감사합니다. @KaraBenNemsi에 대한
편집 : 당신이 말한대로
나는 .toDate()
를 업데이트합니다.
&
는 작업에서 나는var AlarmDate : Date?
대신
var AlarmDate : Date! = nil
(필자는 응용 프로그램에서 다른 코드를 많이 변경해야합니다 원인 난 당신이 지금
Task.swift
다른 팁을있어 사용하지 않은) 사용.
그리고 ResultTask.AlarmDate = results?.string(forColumn: "Alarm").toDate()
을 사용하고 작업에 알람이없는 경우 fatal error: unexpectedly found nil while unwrapping an Optional value
이 표시됩니다.이
에서이
var AlarmDate: Date! = nil
이
var AlarmDate: Date?
에 선택 사양 일 그리고 알람을 설정하려면이 줄을 사용 할 수 있기 때문에
(부분적으로 모순되는) 질문 및 느낌표의 엉망을 정리하는 것이 좋습니다. 속성이 값을 가지고 있다고 가정하면 속성을 비표준으로 처리하고 그렇지 않으면 실제 옵션으로 처리합니다. 암시 적 언 래핑 옵션으로 선언 된 속성은 최악의 방법입니다. – vadian
@vadian 나는 그것에 익숙하지 않다. 나는 그것을 싫어하고 두통을 느낀다. 하지만 그걸로 많이 연주하고 그것으로 많은 상황을 만들었지 만 대부분 오류가있어서 앱을 실행할 수 없거나 작동하지만 원하는만큼 좋아지지 않았습니다. –
그래서 나는이 줄'ResultTask.AlarmDate = results? .string (forColumn : "Alarm"). toDate()'에서 여전히 충돌한다는 것을 이해한다. 'string (forColumn : String)'함수의 코드를 올리시겠습니까? – KaraBenNemsi