Я посмотрел на следующие вопросы, и они не касались вопроса у меня есть:Сохранение JSON в Core Data
Другие предложенные ссылки не были даже близки к мой вопрос. Моя проблема заключается в следующем: я собираю данные из своего собственного домена, используя JSON Decode, а затем пытаюсь вставить данные в Core Data. Является ли работает 99% времени, но мое приложение падает иногда и я получаю сообщение об ошибке:
2016-01-07 09:49:33.096 AppleLawnApp[564:400038] CoreData: error: Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. -[__NSCFSet addObject:]: attempt to insert nil with userInfo (null)
2016-01-07 09:49:33.098 AppleLawnApp[564:400038] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet addObject:]: attempt to insert nil'
Я поместил его внутрь блока действия кода для кнопки:
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext
let url = NSURL(string: "http://www.mydomain/file.php")
if url != nil {
let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
if error == nil {
let urlContent = NSString(data: data!, encoding: NSUTF8StringEncoding) as NSString!
let data: NSData = urlContent.dataUsingEncoding(NSUTF8StringEncoding)!
do {
let jsonObject = try (NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as? NSArray)!
var index1 = 0
while index1 < jsonObject.count {
let newEntry = NSEntityDescription.insertNewObjectForEntityForName(MyTableData, inManagedObjectContext: context) as NSManagedObject
let maindata = (jsonObject[index1] as! NSDictionary)
let this1 = maindata["dBase1"] as! String
let this2 = maindata["dBase2"] as! String
let this3 = maindata["dBase3"] as! String
let this4 = maindata["dBase4"] as! String
let this5 = maindata["dBase5"] as! String
let this6 = maindata["dBase6"] as! String
newEntry.setValue(this1, forKey: "CD1")
newEntry.setValue(this2, forKey: "CD2")
newEntry.setValue(this3, forKey: "CD3")
newEntry.setValue(this4, forKey: "CD4")
newEntry.setValue(this5, forKey: "CD5")
newEntry.setValue(this6, forKey: "CD6")
do {
try context.save()
}
catch {
print(error)
}
let data1 = arrayOne(c1: this1 c2: this2, c3: this3, c4: this4, c5: this5, c6: this6)
self.myArray.append(data1)
index1++
}
}
catch {
print(error)
}
}
})
task.resume()
}
}
Я проверить это. Спасибо за вход. –