ios - Fail to save the attribute in NSManagedObject in my Swift language -
i have 3 attribute in setting entity. dayofexpiredday, dayofexpiredday1 , timeofexpiredday. after running below code, can save timeofexpiredday value. strange thing save value dayofexpiredday1 dayofexpiredday nil. print out mysettingitem data information on below well. can it? thanks
override func viewdidload() { super.viewdidload() // additional setup after loading view. stepper.wraps = true stepper.autorepeat = true stepper.maximumvalue = 99 let appdel: appdelegate = uiapplication.sharedapplication().delegate as! appdelegate let contxt: nsmanagedobjectcontext = appdel.managedobjectcontext! let freq = nsfetchrequest(entityname: "setting") mysettinglist = contxt.executefetchrequest(freq, error: nil)! if mysettinglist.count == 0 { daysbeforeexpireddate = 0 let en = nsentitydescription.entityforname("setting", inmanagedobjectcontext: contxt) var newitem = setting(entity: en!, insertintomanagedobjectcontext: contxt) newitem.dayofexpiredday = daysbeforeexpireddate println("newitem.dayofexpiredday:\(newitem.dayofexpiredday)") let initialdatecomponents = nsdatecomponents() initialdatecomponents.year = 2014 initialdatecomponents.month = 12 initialdatecomponents.day = 25 initialdatecomponents.hour = 7 initialdatecomponents.minute = 0 initialdatecomponents.second = 0 let initialdate = nscalendar.currentcalendar().datefromcomponents(initialdatecomponents)! /***** nsdateformatter part *****/ let formatter = nsdateformatter() formatter.datestyle = nsdateformatterstyle.longstyle formatter.timestyle = .mediumstyle notificationtime = initialdate newitem.timeofexpiredday = notificationtime contxt.save(nil) let freq = nsfetchrequest(entityname: "setting") mysettinglist = contxt.executefetchrequest(freq, error: nil)! mysettingitem = mysettinglist[0] as! nsmanagedobject } else { mysettingitem = mysettinglist[0] as! nsmanagedobject daysbeforeexpireddate = mysettingitem.valueforkeypath("dayofexpiredday") as! int var num : double = double(daysbeforeexpireddate) stepper.value = num notificationtime = mysettingitem.valueforkeypath("timeofexpiredday") as! nsdate } println("mysettingitem:\(mysettingitem.description)") updatedatepicker(notificationtime) updatelabelnotification(daysbeforeexpireddate) } here setting.swift
import uikit import coredata @objc(setting) class setting: nsmanagedobject { @nsmanaged var dayofexpiredday: int @nsmanaged var dayofexpiredday1: int @nsmanaged var timeofexpiredday: nsdate } i have enabled sql debug mode -com.apple.coredata.sqldebug 3 , here output.
the first run app , set below output.
2015-05-15 20:05:35.244 jplist[10577:646588] coredata: annotation: connecting sqlite database file @ "/users/patrick/library/developer/coresimulator/devices/ce8973dd-5e27-4aa9-8976- 1cbb39ed4f32/data/containers/data/application/55364660-bdec-43e0-a3a5-191b0e53d490/documents/jplist.sqlite" 2015-05-15 20:05:35.245 jplist[10577:646588] coredata: annotation: creating schema. 2015-05-15 20:05:35.245 jplist[10577:646588] coredata: sql: pragma page_size=4096 2015-05-15 20:05:35.245 jplist[10577:646588] coredata: sql: pragma auto_vacuum=2 2015-05-15 20:05:35.249 jplist[10577:646588] coredata: sql: begin exclusive 2015-05-15 20:05:35.249 jplist[10577:646588] coredata: sql: select tbl_name sqlite_master tbl_name = 'z_metadata' 2015-05-15 20:05:35.249 jplist[10577:646588] coredata: sql: create table zlist ( z_pk integer primary key, z_ent integer, z_opt integer, zexpiredon timestamp, zfirstalarmon timestamp, zquantity float, zinfo varchar, zitem varchar, zquantity1 varchar, zphoto blob ) 2015-05-15 20:05:35.250 jplist[10577:646588] coredata: sql: create table zsetting ( z_pk integer primary key, z_ent integer, z_opt integer, zdayofexpiredday integer, zdayofexpiredday1 integer, ztimeofexpiredday timestamp ) 2015-05-15 20:05:35.250 jplist[10577:646588] coredata: annotation: creating primary key table. 2015-05-15 20:05:35.250 jplist[10577:646588] coredata: sql: create table z_primarykey (z_ent integer primary key, z_name varchar, z_super integer, z_max integer) 2015-05-15 20:05:35.256 jplist[10577:646588] coredata: sql: insert z_primarykey(z_ent, z_name, z_super, z_max) values(1, 'list', 0, 0) 2015-05-15 20:05:35.257 jplist[10577:646588] coredata: sql: insert z_primarykey(z_ent, z_name, z_super, z_max) values(2, 'setting', 0, 0) 2015-05-15 20:05:35.257 jplist[10577:646588] coredata: sql: create table z_metadata (z_version integer primary key, z_uuid varchar(255), z_plist blob) 2015-05-15 20:05:35.258 jplist[10577:646588] coredata: sql: select tbl_name sqlite_master tbl_name = 'z_metadata' 2015-05-15 20:05:35.258 jplist[10577:646588] coredata: sql: delete z_metadata z_version = ? 2015-05-15 20:05:35.258 jplist[10577:646588] coredata: details: sqlite bind[0] = 1 2015-05-15 20:05:35.258 jplist[10577:646588] coredata: sql: insert z_metadata (z_version, z_uuid, z_plist) values (?, ?, ?) 2015-05-15 20:05:35.258 jplist[10577:646588] coredata: details: sqlite bind[0] = 1 2015-05-15 20:05:35.259 jplist[10577:646588] coredata: details: sqlite bind[1] = "26333cdc-2708-470e-a0de-f579a2bbcac7" 2015-05-15 20:05:35.259 jplist[10577:646588] coredata: details: sqlite bind[2] = <nsdata len=355> 2015-05-15 20:05:35.259 jplist[10577:646588] coredata: annotation: saving new meta data; version = 1 ; uuid = 26333cdc-2708-470e-a0de-f579a2bbcac7 2015-05-15 20:05:35.259 jplist[10577:646588] coredata: sql: commit 2015-05-15 20:05:35.262 jplist[10577:646588] coredata: sql: pragma journal_mode=wal 2015-05-15 20:05:35.266 jplist[10577:646588] coredata: sql: pragma journal_mode=wal 2015-05-15 20:05:35.266 jplist[10577:646588] coredata: sql: pragma cache_size=200 2015-05-15 20:05:35.266 jplist[10577:646588] coredata: sql: select z_version, z_uuid, z_plist z_metadata 2015-05-15 20:05:35.270 jplist[10577:646588] coredata: sql: select 0, t0.z_pk, t0.z_opt, t0.zexpiredon, t0.zfirstalarmon, t0.zinfo, t0.zitem, t0.zphoto, t0.zquantity, t0.zquantity1 zlist t0 2015-05-15 20:05:35.270 jplist[10577:646588] coredata: annotation: sql connection fetch time: 0.0003s 2015-05-15 20:05:35.270 jplist[10577:646588] coredata: annotation: fetch using nssqlitestatement <0x786c4a40> on entity 'list' sql text 'select 0, t0.z_pk, t0.z_opt, t0.zexpiredon, t0.zfirstalarmon, t0.zinfo, t0.zitem, t0.zphoto, t0.zquantity, t0.zquantity1 zlist t0 ' returned 0 rows values: () 2015-05-15 20:05:35.270 jplist[10577:646588] coredata: annotation: total fetch execution time: 0.0008s 0 rows. 2015-05-15 20:05:38.164 jplist[10577:646588] coredata: sql: select 0, t0.z_pk, t0.z_opt, t0.zdayofexpiredday, t0.zdayofexpiredday1, t0.ztimeofexpiredday zsetting t0 2015-05-15 20:05:38.165 jplist[10577:646588] coredata: annotation: sql connection fetch time: 0.0002s 2015-05-15 20:05:38.165 jplist[10577:646588] coredata: annotation: fetch using nssqlitestatement <0x78782170> on entity 'setting' sql text 'select 0, t0.z_pk, t0.z_opt, t0.zdayofexpiredday, t0.zdayofexpiredday1, t0.ztimeofexpiredday zsetting t0 ' returned 0 rows values: () 2015-05-15 20:05:38.165 jplist[10577:646588] coredata: annotation: total fetch execution time: 0.0006s 0 rows. newitem.dayofexpiredday:0 2015-05-15 20:05:38.175 jplist[10577:646588] coredata: sql: begin exclusive 2015-05-15 20:05:38.175 jplist[10577:646588] coredata: sql: select z_max z_primarykey z_ent = ? 2015-05-15 20:05:38.176 jplist[10577:646588] coredata: annotation: getting max pk entityid = 2 2015-05-15 20:05:38.176 jplist[10577:646588] coredata: sql: update z_primarykey set z_max = ? z_ent = ? , z_max = ? 2015-05-15 20:05:38.176 jplist[10577:646588] coredata: annotation: updating max pk entityid = 2 old = 0 , new = 1 2015-05-15 20:05:38.176 jplist[10577:646588] coredata: sql: commit 2015-05-15 20:05:38.179 jplist[10577:646588] coredata: sql: begin exclusive 2015-05-15 20:05:38.180 jplist[10577:646588] coredata: sql: insert zsetting(z_pk, z_ent, z_opt, zdayofexpiredday, zdayofexpiredday1, ztimeofexpiredday) values(?, ?, ?, ?, ?, ?) 2015-05-15 20:05:38.180 jplist[10577:646588] coredata: details: sqlite bind[0] = (int64)1 2015-05-15 20:05:38.180 jplist[10577:646588] coredata: details: sqlite bind[1] = (int64)2 2015-05-15 20:05:38.181 jplist[10577:646588] coredata: details: sqlite bind[2] = (int64)1 2015-05-15 20:05:38.181 jplist[10577:646588] coredata: details: sqlite bind[3] = nil 2015-05-15 20:05:38.181 jplist[10577:646588] coredata: details: sqlite bind[4] = 0 2015-05-15 20:05:38.181 jplist[10577:646588] coredata: details: sqlite bind[5] = "441154800.000000" 2015-05-15 20:05:38.182 jplist[10577:646588] coredata: sql: commit 2015-05-15 20:05:38.186 jplist[10577:646588] coredata: sql: pragma page_count 2015-05-15 20:05:38.187 jplist[10577:646588] coredata: annotation: sql execution time: 0.0003s 2015-05-15 20:05:38.187 jplist[10577:646588] coredata: sql: pragma freelist_count 2015-05-15 20:05:38.187 jplist[10577:646588] coredata: annotation: sql execution time: 0.0003s 2015-05-15 20:05:38.188 jplist[10577:646588] coredata: sql: select 0, t0.z_pk, t0.z_opt, t0.zdayofexpiredday, t0.zdayofexpiredday1, t0.ztimeofexpiredday zsetting t0 2015-05-15 20:05:38.188 jplist[10577:646588] coredata: annotation: sql connection fetch time: 0.0003s 2015-05-15 20:05:38.190 jplist[10577:646588] coredata: annotation: fetch using nssqlitestatement <0x78629ba0> on entity 'setting' sql text 'select 0, t0.z_pk, t0.z_opt, t0.zdayofexpiredday, t0.zdayofexpiredday1, t0.ztimeofexpiredday zsetting t0 ' returned 1 rows values: ( "<nsmanagedobject: 0x786da760> (entity: setting; id: 0x7862a570 <x-coredata://26333cdc-2708-470e-a0de-f579a2bbcac7/setting/p1> ; data: {\n dayofexpiredday = nil;\n dayofexpiredday1 = 0;\n timeofexpiredday = \"2014-12-24 23:00:00 +0000\";\n})") 2015-05-15 20:05:38.190 jplist[10577:646588] coredata: annotation: total fetch execution time: 0.0022s 1 rows. mysettingitem:<nsmanagedobject: 0x786da760> (entity: setting; id: 0x7862a570 <x-coredata://26333cdc-2708-470e-a0de-f579a2bbcac7/setting/p1> ; data: { dayofexpiredday = nil; dayofexpiredday1 = 0; timeofexpiredday = "2014-12-24 23:00:00 +0000"; }) the second run app , set below output.
2015-05-15 20:06:10.938 jplist[10596:647402] coredata: annotation: connecting sqlite database file @ "/users/patrick/library/developer/coresimulator/devices/ce8973dd-5e27-4aa9-8976-1cbb39ed4f32/data/containers/data/application/4305f6af-eda9-4301-8c10-578037e85fce/documents/jplist.sqlite" 2015-05-15 20:06:10.941 jplist[10596:647402] coredata: sql: select tbl_name sqlite_master tbl_name = 'z_metadata' 2015-05-15 20:06:10.945 jplist[10596:647402] coredata: sql: pragma journal_mode=wal 2015-05-15 20:06:10.945 jplist[10596:647402] coredata: sql: pragma cache_size=200 2015-05-15 20:06:10.945 jplist[10596:647402] coredata: sql: select z_version, z_uuid, z_plist z_metadata 2015-05-15 20:06:10.946 jplist[10596:647402] coredata: sql: select 0, t0.z_pk, t0.z_opt, t0.zexpiredon, t0.zfirstalarmon, t0.zinfo, t0.zitem, t0.zphoto, t0.zquantity, t0.zquantity1 zlist t0 2015-05-15 20:06:10.946 jplist[10596:647402] coredata: annotation: sql connection fetch time: 0.0002s 2015-05-15 20:06:10.946 jplist[10596:647402] coredata: annotation: fetch using nssqlitestatement <0x78e5ebd0> on entity 'list' sql text 'select 0, t0.z_pk, t0.z_opt, t0.zexpiredon, t0.zfirstalarmon, t0.zinfo, t0.zitem, t0.zphoto, t0.zquantity, t0.zquantity1 zlist t0 ' returned 0 rows values: () 2015-05-15 20:06:10.946 jplist[10596:647402] coredata: annotation: total fetch execution time: 0.0005s 0 rows. 2015-05-15 20:06:12.441 jplist[10596:647402] coredata: sql: select 0, t0.z_pk, t0.z_opt, t0.zdayofexpiredday, t0.zdayofexpiredday1, t0.ztimeofexpiredday zsetting t0 2015-05-15 20:06:12.442 jplist[10596:647402] coredata: annotation: sql connection fetch time: 0.0003s 2015-05-15 20:06:12.442 jplist[10596:647402] coredata: annotation: fetch using nssqlitestatement <0x78f865c0> on entity 'setting' sql text 'select 0, t0.z_pk, t0.z_opt, t0.zdayofexpiredday, t0.zdayofexpiredday1, t0.ztimeofexpiredday zsetting t0 ' returned 1 rows values: ( "<nsmanagedobject: 0x78e78510> (entity: setting; id: 0x7a260b20 <x-coredata://26333cdc-2708-470e-a0de-f579a2bbcac7/setting/p1> ; data: <fault>)") 2015-05-15 20:06:12.442 jplist[10596:647402] coredata: annotation: total fetch execution time: 0.0011s 1 rows. fatal error: unexpectedly found nil while unwrapping optional value (lldb)
Comments
Post a Comment