WWDC2015 presentation video में बताया गया है नया Xcode7 में, हम सेट कर सकते हैं वस्तुओं Xcode मॉडल संपादक में सीधे विशिष्टता। मैं इसे अपना कोड लागू करने की कोशिश कर रहा था, लेकिन कुछ उम्मीद के अनुसार काम नहीं कर रहा है। जब मैं डुप्लिकेट वस्तु को बचाने की कोशिश, Xcode बचाने को खारिज कर दिया है, लेकिन डुप्लिकेट किए गए सेल के साथ तालिका अपडेट।iOS9 Xcode 7 - कोर डेटा - परहेज डुप्लिकेट वस्तुओं
तो मैं अद्वितीय विशेषताओं STARTDATE और ENDDATE निर्धारित किया है।
तब मैं अपने त्रुटि को संभालने और UIAlertController द्वारा उपयोगकर्ता को सूचित करने के लिए समारोह को बचाने के संशोधित किया है।
func addContract() {
do {
let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = appDelegate.managedObjectContext
let entity = NSEntityDescription.entityForName("Contract", inManagedObjectContext: context)
let newContractData = Contract(entity: entity!, insertIntoManagedObjectContext: context)
newContractData.startdate = dateFormatter.dateFromString(startDateTextField.text!)!
newContractData.enddate = dateFormatter.dateFromString(endDateTextField.text!)!
newContractData.ship = shipNameTextField.text!
newContractData.position = positionOnBoardTextField.text!
newContractData.workingdays = Int(workingDaysLabel.text!)!
try context.save()
} catch {
let alertController = UIAlertController(
title: "Error",
message: "The contract exsist",
preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(
title: "OK",
style: UIAlertActionStyle.Cancel,
handler: nil)
alertController.addAction(okAction)
presentViewController(alertController, animated: true, completion: nil)
}
}
अब तक
तो अच्छा है, लेकिन जब मैं रद्द बटन के साथ जड़ नियंत्रक के लिए वापस जाओ, टेबल डुप्लिकेट सेल के साथ अद्यतन प्रकट होता है।
@IBAction func cancelButtonPressed(sender: UIBarButtonItem) {
self.navigationController?.popToRootViewControllerAnimated(true)
}
इसके अतिरिक्त, एप्लिकेशन को रोकें और चलाएं डुप्लिकेट को हटा दें।
यहां समस्याग्रस्त व्यवहार के video है।
Error Domain=NSCocoaErrorDomain Code=1551 "The operation couldn’t be completed. (Cocoa error 1551.)" UserInfo=0x7fc02d462190 {Conflicts=(
{
constraint = (
startdate,
enddate
);
entity = Contract;
objects = (
"<Contract: 0x7fc02d45ba60> (entity: Contract; id: 0x7fc02d019430 <x-coredata:///Contract/t0897571B-200B-4F04-AF87-D50831E2DE672> ; data: {\n enddate = \"2017-06-13 21:00:00 +0000\";\n position = test;\n ship = test;\n startdate = \"2016-06-13 21:00:00 +0000\";\n workingdays = 366;\n})",
"<Contract: 0x7fc02b7433c0> (entity: Contract; id: 0xd000000000100000 <x-coredata://C3318932-BEDB-4AB6-A856-103F542BCF44/Contract/p4> ; data: {\n enddate = \"2017-06-13 21:00:00 +0000\";\n position = test;\n ship = test;\n startdate = \"2016-06-13 21:00:00 +0000\";\n workingdays = 366;\n})"
);
}
)}
2015-06-14 19:54:15.880 WorkingDays[6028:2219449] popToViewController:transition: called on <UINavigationController 0x7fc02c007e00> while an existing transition or presentation is occurring; the navigation stack will not be updated.
addContract के संशोधन() ठीक करने के लिए समस्या का पालन है:
func addContract() {
let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = appDelegate.managedObjectContext
let entity = NSEntityDescription.entityForName("Contract", inManagedObjectContext: context)
let newContractData = Contract(entity: entity!, insertIntoManagedObjectContext: context)
do {
newContractData.startdate = dateFormatter.dateFromString(startDateTextField.text!)!
newContractData.enddate = dateFormatter.dateFromString(endDateTextField.text!)!
newContractData.ship = shipNameTextField.text!
newContractData.position = positionOnBoardTextField.text!
newContractData.workingdays = Int(workingDaysLabel.text!)!
try context.save()
} catch {
let alertController = UIAlertController(
title: "Error",
message: "The contract exsist",
preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(
title: "OK",
style: UIAlertActionStyle.Cancel,
handler: nil)
alertController.addAction(okAction)
presentViewController(alertController, animated: true, completion: nil)
context.deleteObject(newContractData)
print(error)
}
}
यह केवल प्रासंगिक जानकारी दिखाने के लिए उपयोगी होगा। और वीडियो से, ऐसा लगता है कि आपको केवल एक ही चीज दिखाई देनी है जो निर्धारित करता है कि कौन सी विशेषता अद्वितीय है और कोर डेटा सबकुछ का ख्याल रखेगा। हम नहीं देख सकते कि आपने इन कोडों के साथ ऐसा किया है या नहीं। – Eendje
उत्तर के लिए धन्यवाद। थोड़ा स्वार्थी कि कोई मुझे समस्या के साथ मदद करने के लिए पूरे कोड गर्त स्क्रॉल करेगा उम्मीद करना था। – nikolayDudrenov