คำถามติดแท็ก core-data

Core Data คือการสร้างแบบจำลองวัตถุและกรอบการคงอยู่ของ Apple สำหรับ iOS, iPadOS, tvOS, watchOS และ macOS Xcode มีตัวแก้ไขโมเดลอ็อบเจ็กต์สำหรับระบุเอนทิตีแอ็ตทริบิวต์และความสัมพันธ์

13
ไม่พบคลาสย่อยเฉพาะของ NSManagedObject
ฉันกำลังพัฒนาแอพด้วย Core Data เมื่อฉันสร้างอินสแตนซ์โดยใช้: let entity = NSEntityDescription.entityForName("User", inManagedObjectContext: appDelegate.managedObjectContext) let user = User(entity: entity, insertIntoManagedObjectContext: appDelegate.managedObjectContext) ฉันได้รับคำเตือนในบันทึก: CoreData: warning: Unable to load class named 'User' for entity 'User'. Class not found, using default NSManagedObject instead. ฉันจะแก้ไขได้อย่างไร และคำถามอื่นฉันจะกำหนดวิธีการอินสแตนซ์ในคลาสย่อย NSManagedObject ได้อย่างไร แก้ไข: ฉันได้ระบุคลาสของเอนทิตีเหมือนในภาพหน้าจอต่อไปนี้:

8
NSPredicate: การกรองวัตถุตามวันของคุณสมบัติ NSDate
ฉันมีโมเดลข้อมูลหลักที่มีNSDateคุณสมบัติ ฉันต้องการกรองฐานข้อมูลตามวัน ฉันคิดว่าการแก้ปัญหาจะเกี่ยวข้องกับNSPredicateแต่ฉันไม่แน่ใจว่าจะรวมทั้งหมดเข้าด้วยกันได้อย่างไร ฉันรู้วิธีเปรียบเทียบวันของสองวันNSDateโดยใช้NSDateComponentsและNSCalendarแต่ฉันจะกรองด้วยNSPredicate? บางทีฉันอาจต้องสร้างหมวดหมู่ในNSManagedObjectคลาสย่อยของฉันที่สามารถส่งคืนวันที่เปล่าโดยมีเพียงปีเดือนและวัน จากนั้นฉันสามารถเปรียบเทียบสิ่งนั้นในNSPredicateไฟล์. นี่เป็นคำแนะนำของคุณหรือมีอะไรที่ง่ายกว่านี้

2
“ คอลเลกชันถูกกลายพันธุ์ในขณะที่ถูกแจกแจง” บน executeFetchRequest
ตอนนี้ฉันติดปัญหามาหลายชั่วโมงแล้วและอ่านทุกอย่างเกี่ยวกับสิ่งนี้ใน stackoverflow (และใช้ทุกคำแนะนำที่พบ) ตอนนี้ฉันต้องการความช่วยเหลืออย่างเป็นทางการ ; o) นี่คือบริบท: ในโครงการ iPhone ของฉันฉันต้องนำเข้าข้อมูลบนพื้นหลังและแทรกในบริบทวัตถุที่มีการจัดการ ตามคำแนะนำที่พบที่นี่นี่คือสิ่งที่ฉันกำลังทำ: บันทึก moc หลัก จัดเตรียมม็อคพื้นหลังโดยใช้ผู้ประสานงานร้านค้าถาวรที่ใช้โดยมอคหลัก ลงทะเบียนคอนโทรลเลอร์ของฉันเป็นผู้สังเกตการณ์ของการแจ้งเตือน NSManagedObjectContextDidSaveNotification สำหรับ moc พื้นหลัง เรียกใช้วิธีการนำเข้าบนเธรดพื้นหลัง ทุกครั้งที่ได้รับข้อมูลให้ใส่ข้อมูลลงในพื้นหลัง moc เมื่อนำเข้าข้อมูลทั้งหมดแล้วให้บันทึกพื้นหลัง moc รวมการเปลี่ยนแปลงเข้ากับ moc หลักบนเธรดหลัก ยกเลิกการลงทะเบียนคอนโทรลเลอร์ของฉันเป็นผู้สังเกตการณ์สำหรับการแจ้งเตือน รีเซ็ตและปล่อยพื้นหลัง moc บางครั้ง (และสุ่ม) ข้อยกเว้น ... *** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSCFSet: 0x5e0b930> was mutated …

3
จะรับวัตถุ Core Data จาก Object ID เฉพาะได้อย่างไร
ฉันสามารถรับ ID ของวัตถุใน Core Data ได้อย่างง่ายดายโดยใช้รหัสต่อไปนี้: NSManagedObjectID *moID = [managedObject objectID]; อย่างไรก็ตามมีวิธีนำออบเจ็กต์ออกจากที่เก็บข้อมูลหลักโดยการให้ ID อ็อบเจ็กต์เฉพาะหรือไม่ ฉันรู้ว่าฉันสามารถทำได้โดยใช้ NSFetchRequest เช่นนี้: NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext]; [fetchRequest setEntity:entity]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(objectID = %@)", myObjectID]; [fetchRequest setPredicate:predicate]; อย่างไรก็ตามฉันต้องการดำเนินการในลักษณะที่ไม่ได้เริ่มต้นคำขอดึงข้อมูลของตัวเอง ความคิดใด ๆ ?

3
แนวทางปฏิบัติที่ดีที่สุด - โดเมนและรหัส NSError สำหรับโครงการ / แอปของคุณเอง
มีโพสต์ SO ก่อนหน้านี้เกี่ยวกับการตั้งค่าโดเมนข้อผิดพลาดสำหรับเฟรมเวิร์กของคุณเอง แต่แนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับการตั้งค่าโดเมนข้อผิดพลาดและรหัสข้อผิดพลาดที่กำหนดเองสำหรับโครงการ / แอปของคุณเองคืออะไร? ตัวอย่างเช่นสมมติว่าคุณกำลังทำงานในแอปที่เน้นข้อมูลหลักซึ่งมีการตรวจสอบความถูกต้องจำนวนมากคุณควรยึดติดกับรหัสข้อผิดพลาดข้อมูลหลัก "นอกชั้นวาง" (เช่นNSManagedObjectValidationErrorจากCoreDataErrors.h) หรือควรสร้างขึ้นเองMyAppErrors.hและกำหนดข้อผิดพลาดด้วย ความเฉพาะเจาะจงมากขึ้น (เช่นMyAppValidationErrorInvalidCombinationOfLimbs? การสร้างโดเมนข้อผิดพลาดที่กำหนดเองและชุดรหัสข้อผิดพลาดอาจทำให้รหัสของคุณไม่ชัดเจน แต่มีค่าใช้จ่ายมากเกินไปที่จะรักษาและต้องกังวลเกี่ยวกับความขัดแย้งในการกำหนดหมายเลขรหัสข้อผิดพลาดหรือไม่ หรือมีข้อกังวลอื่น ๆ ที่นี่?

2
การใช้ Core Data, iCloud และ CloudKit สำหรับการซิงค์และสำรองข้อมูลและวิธีการทำงานร่วมกัน
ฉันอยู่ในช่วงแรกของการสร้างแอปที่ฉันต้องการบันทึกซิงค์และสำรองข้อมูล แอปจะไม่เก็บไฟล์ใด ๆ เพียงแค่ข้อมูลในฐานข้อมูล มันจะเป็น iOS 8 ขึ้นไปดังนั้นฉันจึงสามารถใช้ CloudKit ได้ ฉันได้ทำการวิจัยและยังไม่ชัดเจนว่า Core Data, iCloud และ CloudKit ทำงานร่วมกันอย่างไร เท่าที่เข้าใจ CloudKit เป็นเพียงวิธีการรับและดึงข้อมูลไปยัง / จากระบบคลาวด์ CloudKit เป็นเพียงวิธีอื่นในการซิงค์ข้อมูลกับ iCloud หรือไม่? คำถามของฉันคือ: หากฉันใช้ CloudKit ฉันยังจำเป็นต้องสร้างฐานข้อมูลหลักภายในเครื่องหรือไม่ ถ้าใช่มันจะซิงค์กับ iCloud โดยอัตโนมัติหรือฉันจะต้องเรียกวิธีการจัดเก็บไปยังทั้งสองที่? หากข้อมูลถูกเก็บไว้ในระบบคลาวด์เท่านั้นผู้ใช้จะสามารถเข้าถึงได้เมื่ออุปกรณ์ iOS ไม่ได้เชื่อมต่อกับอินเทอร์เน็ต ฉันอ่านว่า CloudKit จะมีแคชที่ จำกัด เท่านั้น จะทำงานอย่างไรหากไม่ได้เปิดใช้งานบัญชี iCloud หากมีใครสามารถแยกย่อยสิ่งที่แต่ละเทคโนโลยีทำในกระบวนการบันทึกและซิงค์ฐานข้อมูลข้อมูลหลักแบบออฟไลน์และออนไลน์ ความเข้าใจปัจจุบันของฉันคือ: Core Data ใช้ในการจัดเก็บข้อมูลในเครื่อง iCloud ซิงค์ข้อมูลและจัดเก็บในระบบคลาวด์ …

9
วิธีที่ดีที่สุดในการนำ Enums ไปใช้กับ Core Data
วิธีใดที่ดีที่สุดในการผูกเอนทิตีข้อมูลหลักกับค่า enum เพื่อให้ฉันสามารถกำหนดคุณสมบัติประเภทให้กับเอนทิตีได้ กล่าวอีกนัยหนึ่งฉันมีเอนทิตีที่เรียกItemด้วยitemTypeคุณสมบัติที่ฉันต้องการผูกมัดกับ enum วิธีที่ดีที่สุดในการดำเนินการนี้คืออะไร

2
Coredata Error“ data: <fault>”
ฉันพยายามดึงข้อมูลจาก CoreData ด้วยรหัสต่อไปนี้ NSFetchRequest *request = [[NSFetchRequest alloc] init]; request.entity = [NSEntityDescription entityForName:@"Cave" inManagedObjectContext:self.context]; request.predicate = [NSPredicate predicateWithFormat:@"(latitude &gt; 0) AND (longitude &gt; 0)"]; NSError *error; NSLog(@"%@",[self.context executeFetchRequest:request error:&amp;error]); NSLog(@"%@",[error localizedDescription]); CoreData ควรมีวัตถุที่ตรงกัน 9 ชิ้นและพบวัตถุ 9 ชิ้น ดังนั้นเพรดิเคตควรใช้งานได้ แต่ฉันได้รับสิ่งนี้ในคอนโซล 2011-09-05 07:41:42.267 CaveConditions[6930:11903] ( "&lt;NSManagedObject: 0x7368060&gt; (entity: Cave; id: 0x7367880 &lt;x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p31&gt; …
107 iphone  core-data 

4
Xcode 4 และ Core Data: วิธีเปิดใช้งานการดีบัก SQL
ฉันกำลังทำงานกับแอป iOS สากลและฉันต้องการดู SQL ดิบในบันทึกเมื่อฉันทำการดีบัก มีข้อมูลบางอย่างในบล็อกโพสต์นี้เกี่ยวกับวิธีเปิดใช้งานการบันทึก SQL ดิบสำหรับการพัฒนา iOS Core Data ตัวอย่างที่ให้มาคือสำหรับ Xcode 3 และฉันไม่ชัดเจนว่าจะเปิดใช้งานสิ่งนี้ใน Xcode 4 ได้อย่างไร ฉันได้ลอง "Product" -&gt; "Edit Scheme" และเพิ่ม " -com.apple.CoreData.SQLDebug 1 " ไปที่ "Arguments Passed on Launch" แต่ฉันยังไม่เห็นผลลัพธ์ใด ๆ ในบันทึก ไม่แน่ใจว่าฉันมองผิดหรือแค่ส่งข้อโต้แย้งไม่ถูกต้อง
102 sql  ios  core-data  xcode4 

9
จะใช้ประเภทนี้กับอินสแตนซ์ NSFetchRequest ได้อย่างไร
ใน Swift 2 รหัสต่อไปนี้ใช้งานได้: let request = NSFetchRequest(entityName: String) แต่ใน Swift 3 ให้ข้อผิดพลาด: ไม่สามารถอนุมานพารามิเตอร์ทั่วไป "ResultType" ได้ เพราะNSFetchRequestตอนนี้เป็นประเภททั่วไป ในเอกสารของพวกเขาพวกเขาเขียนสิ่งนี้: let request: NSFetchRequest&lt;Animal&gt; = Animal.fetchRequest ดังนั้นหากคลาสผลลัพธ์ของฉันเป็นตัวอย่างLevelฉันจะขออย่างถูกต้องได้อย่างไร เนื่องจากไม่ได้ผล: let request: NSFetchRequest&lt;Level&gt; = Level.fetchRequest
102 swift  core-data  swift3 

1
การใช้การนำเข้าข้อมูลหลักที่รวดเร็วและมีประสิทธิภาพบน iOS 5
คำถาม : ฉันจะทำให้บริบทลูกของฉันเห็นการเปลี่ยนแปลงที่ยังคงอยู่ในบริบทหลักได้อย่างไรเพื่อที่จะเรียก NSFetchedResultsController ของฉันเพื่ออัปเดต UI นี่คือการตั้งค่า: คุณมีแอปที่ดาวน์โหลดและเพิ่มข้อมูล XML จำนวนมาก (ประมาณ 2 ล้านระเบียนแต่ละรายการมีขนาดเท่ากับย่อหน้าปกติของข้อความ) ไฟล์. sqlite จะมีขนาดประมาณ 500 MB การเพิ่มเนื้อหานี้ลงในข้อมูลหลักต้องใช้เวลา แต่คุณต้องการให้ผู้ใช้สามารถใช้แอปได้ในขณะที่ข้อมูลโหลดลงในที่เก็บข้อมูลทีละน้อย ผู้ใช้จะต้องมองไม่เห็นและมองไม่เห็นว่ามีการเคลื่อนย้ายข้อมูลจำนวนมากไปรอบ ๆ จึงไม่แฮงค์ไม่กระวนกระวายใจ: เลื่อนเหมือนเนย ถึงกระนั้นแอปก็มีประโยชน์มากขึ้นยิ่งมีการเพิ่มข้อมูลมากขึ้นดังนั้นเราจึงไม่สามารถรอได้ตลอดไปเพื่อเพิ่มข้อมูลไปยังที่เก็บข้อมูลหลัก ในรหัสหมายความว่าฉันต้องการหลีกเลี่ยงรหัสเช่นนี้ในรหัสนำเข้า: [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.25]]; แอปนี้เป็น iOS 5 เท่านั้นดังนั้นอุปกรณ์ที่ช้าที่สุดที่ต้องรองรับคือ iPhone 3GS นี่คือแหล่งข้อมูลที่ฉันใช้ในการพัฒนาโซลูชันปัจจุบันของฉัน: คู่มือการเขียนโปรแกรมข้อมูลหลักของ Apple: การนำเข้าข้อมูลอย่างมีประสิทธิภาพ ใช้ Autorelease Pools เพื่อให้หน่วยความจำไม่ทำงาน ต้นทุนความสัมพันธ์ นำเข้าแบบแบนจากนั้นแก้ไขความสัมพันธ์ในตอนท้าย อย่าถามว่าคุณสามารถช่วยได้หรือไม่มันจะทำให้สิ่งต่างๆช้าลงในลักษณะ O (n ^ …

10
ฉันต้องทำอย่างไรเพื่อให้ Core Data โยกย้ายโมเดลโดยอัตโนมัติ
ฉันได้อ่านเอกสารเกี่ยวกับการย้ายข้อมูลอัตโนมัติ / น้ำหนักเบาสำหรับโมเดลข้อมูลหลัก - แต่ฉันมีปัญหาในการใช้งาน ตามที่ฉันเข้าใจแอปพลิเคชันควรสังเกตว่ารุ่นที่มีอยู่และรุ่นที่มีอยู่ในอุปกรณ์นั้นไม่เหมือนกัน หากคุณเพิ่มเฉพาะแอตทริบิวต์หรือความสัมพันธ์และการเปลี่ยนแปลงง่ายๆที่คล้ายกันโมเดลควรได้รับการอัปเกรดโดยอัตโนมัติ ตัวชี้ใด ๆ - ฉันต้องตั้งค่าบางอย่างใน Xcode หรือไม่?
96 core-data 

27
ไม่สามารถสร้าง NSPersistentStoreCoordinator ด้วยโมเดลศูนย์
เคยแคร็กครั้งแรกที่ Core Data และฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อเรียกใช้รหัสบนอุปกรณ์ของฉัน แต่มันใช้งานได้ดีบนเครื่องจำลอง .. * การยุติแอปเนื่องจากข้อยกเว้นที่ไม่ถูกจับ 'NSInvalidArgumentException' เหตุผล: 'ไม่สามารถสร้าง NSPersistentStoreCoordinator ด้วยโมเดลศูนย์' วิธีการบางอย่างของฉันที่อาจทำให้เกิดปัญหา: - (NSManagedObjectContext *)managedObjectContext { if (__managedObjectContext != nil) { return __managedObjectContext; } NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; if (coordinator != nil) { __managedObjectContext = [[NSManagedObjectContext alloc] init]; [__managedObjectContext setPersistentStoreCoordinator:coordinator]; } return __managedObjectContext; } /** Returns the …

12
CoreData: คำเตือน: ไม่สามารถโหลดคลาสที่ชื่อ
ฉันกำลังทำซ้ำแอพ Objective-C TV Show ที่มีอยู่กับ Swift เวอร์ชันใหม่โดยใช้ Xcode 6.1 และกำลังมีปัญหากับ CoreData ฉันได้สร้างแบบจำลองของ 4 เอนทิตีสร้างคลาสย่อย NSManagedObject (ใน Swift) และไฟล์ทั้งหมดมีการกำหนดเป้าหมายแอปที่เหมาะสม (สำหรับ 'Compile Sources') ฉันยังคงได้รับข้อผิดพลาดนี้ทุกครั้งที่พยายามแทรกเอนทิตีใหม่: CoreData: คำเตือน: ไม่สามารถโหลดคลาสที่ชื่อ 'Shows' สำหรับเอนทิตี 'Shows' ไม่พบคลาสโดยใช้ NSManagedObject เริ่มต้นแทน ความคิดเห็นเล็กน้อย: เมื่อบันทึกเป็นข้อมูลหลักฉันใช้วิธีบริบทแม่ลูกเพื่ออนุญาตการทำเธรดพื้นหลัง ฉันทำได้โดยการตั้งค่า ManagedObjectContext โดยใช้: lazy var managedObjectContext: NSManagedObjectContext? = { // Returns the managed object context for the …

6
จะบันทึก Array ลงใน CoreData ได้อย่างไร?
ฉันต้องการบันทึกอาร์เรย์ของฉันลงใน Core Data let array = [8, 17.7, 18, 21, 0, 0, 34] ค่าภายในอาร์เรย์นั้นและจำนวนค่าเป็นตัวแปร 1. ฉันจะประกาศอะไรในคลาส NSManagedObject ของฉัน? class PBOStatistics: NSManagedObject, Equatable { @NSManaged var date: NSDate @NSManaged var average: NSNumber @NSManaged var historicAverage: NSNumber @NSManaged var total: NSNumber @NSManaged var historicTotal: NSNumber @NSManaged var ordersCount: NSNumber @NSManaged var historicOrdersCount: …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.