swift - Insert [AnyObject] into [NSMutableDictionary] -
i trying build app using tableview 2 columns (one displaying strings, other 1 checkbox each string). strings coming [anyobject] variable. have try many things insert result of [anyobject] nsmutabledictionnary (which used nstableview) none of them works. have build dic manually right number of object (related result of [anyobject]) make work dic build automatically.
here exemple of code, working if [anyobject] made 4 elements. tableview column names "jobs" , "unload" :
import cocoa @nsapplicationmain class appdelegate: nsobject, nsapplicationdelegate,nstableviewdatasource,nstableviewdelegate { @iboutlet weak var window: nswindow! @iboutlet weak var mytableview: nstableview! var dataarray:[nsmutabledictionary] = [["jobs": "", "unload": 0],["jobs": "", "unload": 0],["jobs": "", "unload": 0],["jobs": "", "unload": 0]]; func applicationdidfinishlaunching(anotification: nsnotification) { ... ... ... var ctlelems:[anyobject] = grepout!.componentsseparatedbycharactersinset(nscharacterset.newlinecharacterset()) dataarray = [["jobs": "ctlelems[0]", "unload": 0],["jobs": "ctlelems[1]", "unload": 0],["jobs": "ctlelems[2]", "unload": 0],["jobs": "ctlelems[3]", "unload": 0]]; } func applicationwillterminate(anotification: nsnotification) { } func numberofrowsintableview(atableview: nstableview) -> int { return dataarray.count } func tableview(tableview: nstableview, objectvaluefortablecolumn tablecolumn: nstablecolumn?, row: int) -> anyobject? { let object = dataarray[row] nsmutabledictionary if ((tablecolumn!.identifier) == "unload") { println(object) return object[tablecolumn!.identifier] as? int! } else { return object[tablecolumn!.identifier] as? string! } } func tableview(tableview: nstableview, setobjectvalue object: anyobject?, fortablecolumn tablecolumn: nstablecolumn?, row: int) { dataarray[row].setobject(object!, forkey: (tablecolumn?.identifier)!) } } i following,
var x: int = 0 lines in ctlelems { dataarray = [["jobs": ctlelems[x], "unload": 0]]; x=x+1 } but not working. of time "found nill" error, or last element of [anyobject] displayed. me please?
dataarray = [["jobs": ctlelems[x], "unload": 0]]; this means redefining dataarray each iteration. should append dataarray instead.
declare , init dataarray:
var dataarray = [dictionary<string, any>]() and append it:
for line in ctlelems { dataarray.append(["jobs": line, "unload": 0]) } or in more swifty way:
dataarray = ctlelems.map { ["jobs": $0, "unload": 0] }
Comments
Post a Comment