का उपयोग करके मान संग्रहीत नहीं किए जाते हैं मेरे आवेदन में मैंने ऑब्जेक्ट्स को संग्रहीत करने और पुनर्प्राप्त करने के लिए एक वर्ग (CoredataHandler.swift कहें) का उपयोग किया है। मैंने this tutorials का पालन किया है। मैंने रणनीति 2 का उपयोग किया है: अभिभावक/बाल प्रबंधित ऑब्जेक्ट संदर्भ। लेकिन ऑब्जेक्ट्स कोर्डाटा में संग्रहीत नहीं किया जाता है। NSOperation का उपयोग करने के बजाय मैंने सामान्य वर्ग ऑब्जेक्ट का उपयोग किया है।आईओएस: स्विफ्ट: कोरडाटा: प्राइवेटमैनेज ऑब्जेक्ट कॉन्टेक्स्ट
class CoreDataHandler: NSObject {
//static var sharedInstance:CoreDataHandler = CoreDataHandler()
var privateManagedObjectContext:NSManagedObjectContext?
var mainManagedObjectContext:NSManagedObjectContext?
override init() {
print("core data handler constructor called")
super.init()
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let privateManagedObjectContextlocal = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
privateManagedObjectContextlocal.parentContext = appDelegate.managedObjectContext
self.privateManagedObjectContext = privateManagedObjectContextlocal
self.mainManagedObjectContext = appDelegate.managedObjectContext
let notificationCenter = NSNotificationCenter.defaultCenter()
notificationCenter.addObserver(self, selector: #selector(CoreDataHandler.managedObjectContextDidSave(_:)), name: NSManagedObjectContextDidSaveNotification, object: privateManagedObjectContext)
}
private func insertData(entityName:String,dataDictionary:Dictionary<String, AnyObject?>){
synced(self) {() ->() in
// let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let entityDescription = NSEntityDescription.entityForName(entityName, inManagedObjectContext: self.privateManagedObjectContext!)
let newPerson = NSManagedObject(entity: entityDescription!, insertIntoManagedObjectContext: self.privateManagedObjectContext!)
for (myKey, myVal) in dataDictionary {
if myVal is Int {
if let result_number = myVal as? NSNumber
{
let result_string = "\(result_number)"
newPerson.setValue(result_string, forKey: myKey)
}
}else{
newPerson.setValue(myVal, forKey: myKey)
}
}
//print("insertData",newPerson)
do {
if ((self.privateManagedObjectContext?.hasChanges) != nil){
try self.privateManagedObjectContext!.save()
}
} catch {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nserror = error as NSError
NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
abort()
}
}
}
// MARK: - Insert
func insertOfferObjects(arrOffer : Array<FoodItem>?) {
synced(self) {() ->() in
//Step1: Adding Offer Items
if let _ = arrOffer {
var foodArr:Array<NSManagedObject> = Array()
for foodObj : FoodItem in arrOffer! {
let offerItemEntity = self.createFoodItemEntity(foodObj)
foodArr.append(offerItemEntity)
}
self.insertData("OfferCategory", dataDictionary: ["categoryTitle": "Offers", "foodItemArray": NSOrderedSet(array: foodArr)])
}
}
}
मूल्यों को कोर्डटा में संग्रहीत नहीं किया जाता है। कृपया मुझे करने का सबसे अच्छा तरीका प्रदान करें।
संपादित: अद्यतन :: जवाब से, जब बच्चे संदर्भ
self.privateManagedObjectContext?.performBlockAndWait({
if ((self.privateManagedObjectContext?.hasChanges) != nil){
do {
print("It has changes...............")
try self.privateManagedObjectContext!.save()
self.mainManagedObjectContext?.performBlock({
do {
try self.mainManagedObjectContext!.save()
}catch{
}
})
}catch {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nserror = error as NSError
NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
abort()
}
}
})
धन्यवाद jrturton, मैं एकाधिक वेब सेवा एपीआई कॉल कर रहा हूं और मैं CoreData में उन प्रतिक्रियाओं को संग्रहीत कर रहा हूं। शुरू में मैंने किसी भी बच्चे संदर्भ वस्तु का उपयोग नहीं किया था। मैं appDelegate.managedObjectContext का उपयोग किया गया था। यह ठीक काम कर रहा था लेकिन कभी-कभी ऐप क्रैश हो जाता है कि कुछ त्रुटि जैसे DataData64, अमान्य तर्क त्रुटि। मैंने इसे गुमराह किया और पाया कि यह त्रुटि समवर्ती मुद्दे के कारण हुई। मैं बाल संदर्भ विधियों के साथ क्यों जाता हूं, – Sridhar
अब क्या होता है कि आपने वह कोड जोड़ा है? – jrturton