Core
Data ÊÇʲô£¿
´ó¸Å°ËÄêǰ£¬2005ÄêµÄËÄÔ·ݣ¬Apple ·¢²¼ÁË OS X 10.4£¬ÕýÊÇÔÚÕâ¸ö°æ±¾ÖÐ
Core Data ¿ò¼Ü·¢²¼ÁË¡£ÄǸöʱºò YouTube Ò²¸Õ·¢²¼¡£
Core Data ÊÇÒ»¸öÄ£ÐͲãµÄ¼¼Êõ¡£Core Data °ïÖúÄ㽨Á¢´ú±í³ÌÐò״̬µÄÄ£ÐͲ㡣Core
Data Ò²ÊÇÒ»Öֳ־û¯¼¼Êõ£¬ËüÄܽ«Ä£ÐͶÔÏóµÄ״̬³Ö¾Ã»¯µ½´ÅÅÌ£¬µ«Ëü×îÖØÒªµÄÌØµãÊÇ£ºCore Data
²»½öÊÇÒ»¸ö¼ÓÔØ¡¢±£´æÊý¾ÝµÄ¿ò¼Ü£¬Ëü»¹ÄܺÍÄÚ´æÖеÄÊý¾ÝºÜºÃµÄ¹²Ê¡£
Èç¹ûÄãÖ®Ç°Ôø¾½Ó´¥¹ý Object-relational maping (O/RM)£ºCore Data²»ÊÇÒ»¸ö
O/RM£¬µ«Ëü±È O/RM ÄÜ×öµÄ¸ü¶à¡£Èç¹ûÄãÖ®Ç°Ôø¾½Ó´¥¹ý SQL wrappers£ºCore Data
²»ÊÇÒ»¸ö SQL wrapper¡£ËüĬÈÏʹÓà SQL£¬µ«ÊÇ£¬ËüÊÇÒ»ÖÖ¸ü¸ß¼¶µÄ³éÏó¸ÅÄî¡£Èç¹ûÄãÐèÒªµÄÊÇÒ»¸ö
O/RM »òÕß SQL wrapper£¬ÄÇô Core Data ²¢²»ÊʺÏÄã¡£
¶ÔÏóͼ¹ÜÀí£¨object graph management£©ÊÇ Core Data ×îÇ¿´óµÄ¹¦ÄÜÖ®Ò»¡£ÎªÁ˸üºÃÀûÓÃ
Core Data£¬ÕâÊÇÄãÐèÒªÀí½âµÄÒ»¿éÄÚÈÝ¡£
»¹ÓÐÒ»µãҪעÒ⣺Core Data ÊÇÍêÈ«¶ÀÁ¢ÓÚÈκΠUI ²ã¼¶µÄ¿ò¼Ü¡£ËüÊÇ×÷ΪģÐͲã¿ò¼Ü±»Éè¼Æ³öÀ´µÄ¡£ÔÚ
OS X ÖУ¬ÉõÖÁÔÚһЩºǫ́פÁô³ÌÐòÖУ¬Core Data ¶¼Æð×ŷdz£ÖØÒªµÄÒâÒå¡£
¶ÑÕ»
Core Data ÓÐÏ൱¶à¿ÉÓõÄ×é¼þ¡£ÕâÊÇÒ»¸ö·Ç³£Áé»îµÄ¼¼Êõ¡£ÔÚ´ó¶àÊýµÄʹÓÃÇé¿öÏ£¬ÉèÖö¼Ï൱¼òµ¥¡£
µ±ËùÓеÄ×é¼þ¶¼À¦°óµ½Ò»ÆðµÄʱºò£¬ÎÒÃǰÑËü³Æ×÷ Core Data ¶ÑÕ»£¬Õâ¸ö¶ÑÕ»ÓÐÁ½¸öÖ÷Òª²¿·Ö¡£Ò»²¿·ÖÊǹØÓÚ¶ÔÏóͼ¹ÜÀí£¬ÕâÕýÊÇÄãÐèÒªºÜºÃÕÆÎÕµÄÄÇÒ»²¿·Ö£¬²¢ÇÒÖªµÀÔõôʹÓᣵڶþ²¿·ÖÊǹØÓڳ־û¯£¬±ÈÈ磬±£´æÄãÄ£ÐͶÔÏóµÄ״̬£¬È»ºóÔÙ»Ö¸´Ä£ÐͶÔÏóµÄ״̬¡£
ÔÚÁ½¸ö²¿·ÖÖ®¼ä£¬¼´¶ÑÕ»Öм䣬Êdz־û¯´æ´¢Ðµ÷Æ÷£¨persistent store
coordinator£©£¬Ò²±»³ÆÎªÖмäÉó²éÕß¡£Ëü½«¶ÔÏóͼ¹ÜÀí²¿·ÖºÍ³Ö¾Ã»¯²¿·ÖÀ¦°óÔÚÒ»Æð£¬µ±ËüÃÇÁ½ÕßÖеÄÈκÎÒ»²¿·ÖÐèÒªºÍÁíÒ»²¿·Ö½»Á÷ʱ£¬Õâ±ãÐèÒª³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷À´µ÷½ÚÁË¡£

¶ÔÏóͼ¹ÜÀíÊÇÄã³ÌÐòÄ£ÐͲãµÄÂß¼´æÔڵĵط½¡£Ä£ÐͲãµÄ¶ÔÏó´æÔÚÓÚÒ»¸ö context ÄÚ¡£ÔÚ´ó¶àÊýµÄÉèÖÃÖУ¬´æÔÚÒ»¸ö
context £¬²¢ÇÒËùÓеĶÔÏó´æÔÚÓÚÄǸö context ÖС£Core Data Ö§³Ö¶à¸ö contexts£¬²»¹ý¶ÔÓÚ¸ü¸ß¼¶µÄʹÓÃÇé¿ö²ÅÓá£×¢Òâÿ¸ö
context ºÍÆäËû context ¶¼ÊÇÍêÈ«¶ÀÁ¢µÄ£¬Ò»»á¶ùÎÒÃǽ«»á̸µ½¡£ÐèÒª¼ÇסµÄÊÇ£¬¶ÔÏóºÍËüÃǵÄ
context ÊÇÏà¹ØÁªµÄ¡£Ã¿¸ö±»¹ÜÀíµÄ¶ÔÏó¶¼ÖªµÀ×Ô¼ºÊôÓÚÄĸö context£¬²¢ÇÒÿ¸ö context
¶¼ÖªµÀ×Ô¼º¹ÜÀí×ÅÄÄЩ¶ÔÏó¡£
¶ÑÕ»µÄÁíÒ»²¿·Ö¾ÍÊdz־ÃÁË£¬¼´ Core Data ´ÓÎļþϵͳÖжÁ»òдÊý¾Ý¡£Ã¿¸ö³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷£¨persistent
store coordinator£©¶¼ÓÐÒ»¸öÊôÓÚ×Ô¼ºµÄ³Ö¾Ã»¯´æ´¢£¨persistent store£©£¬²¢ÇÒÕâ¸ö
store ÔÚÎļþϵͳÖÐÓë SQLite Êý¾Ý¿â½»»¥¡£ÎªÁËÖ§³Ö¸ü¸ß¼¶µÄÉèÖã¬Core Data ¿ÉÒÔ½«¶à¸ö
stores ¸½ÊôÓÚͬһ¸ö³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷£¬²¢ÇÒ³ýÁË´æ´¢ SQL ¸ñʽÍ⣬»¹ÓÐºÜ¶à´æ´¢ÀàÐͿɹ©Ñ¡Ôñ¡£
×î³£¼ûµÄ½â¾ö·½°¸ÈçÏÂͼËùʾ£º

×é¼þÈçºÎÒ»Æð¹¤×÷
ÈÃÎÒÃÇ¿ìËٵĿ´Ò»¸öÀý×Ó£¬¿´¿´×é¼þÊÇÈçºÎÐͬ¹¤×÷µÄ¡£ÔÚÎÒÃǵÄÎÄÕ¡¶Ò»¸öÍê³ÉµÄ
Core Data Ó¦Óá·ÖУ¬ÕýºÃÓÐÒ»¸öʵÌ壬¼´Ò»ÖÖ¶ÔÏó£ºÎÒÃÇÓÐÒ»¸ö Item ʵÌå¶ÔÓ¦Ò»¸ö title¡£Ã¿Ò»¸ö
item ¿ÉÒÔÓµÓÐ×Ó items£¬Òò´Ë£¬ÎÒÃÇÓÐÒ»¸ö¸¸×Ó¹ØÏµ¡£
ÕâÊÇÎÒÃǵÄÊý¾ÝÄ£ÐÍ¡£ÕýÈçÎÒÃÇÔÚ¡¶Êý¾ÝÄ£ÐͺÍÄ£ÐͶÔÏó¡·Ò»ÎÄÖÐÌáµ½µÄÒ»Ñù£¬ÔÚ Core Data ÖÐÓÐÒ»ÖÖÌØ±ðµÄ¶ÔÏ󡪡ªÊµÌå¡£ÔÚÕâÖÖÇé¿öÏ£¬ÎÒÃÇÖ»ÓÐÒ»¸öʵÌ壺Item
ʵÌ塣ͬÑùµÄ£¬ÎÒÃÇÓÐÒ»¸ö NSManagedObject µÄ×ÓÀ࣬½Ð×ö Item¡£Õâ¸ö Item ʵÌåÓ³Éäµ½
Item ÀàÉÏ¡£ÔÚÊý¾ÝÄ£Ð͵ÄÎÄÕÂÖлáÏêϸµÄ̸µ½Õâ¸ö¡£
ÎÒÃǵijÌÐò½öÓÐÒ»¸ö¸ù Item¡£ÕⲢûÓÐÊ²Ã´ÆæÃîµÄµØ·½¡£ËüÊÇÒ»¸öÎÒÃÇÓÃÀ´ÏÔʾµ×²ã item µÈ¼¶µÄ item¡£ËüÊÇÒ»¸öÎÒÃÇÓÀÔ¶²»»áΪÆäÉèÖø¸ÀàµÄ
Item¡£
µ±³ÌÐòÔËÐÐʱ£¬ÎÒÃÇÏñÉÏÃæÍ¼Æ¬Ãè»æµÄÒ»ÑùÉèÖÃÎÒÃǵĶÑÕ»£¬Ò»¸ö´æ´¢£¬Ò»¸ö managed object context£¬ÒÔ¼°Ò»¸ö³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷À´½«ËüÃǹØÁªÆðÀ´¡£
ÔÚµÚÒ»´ÎÔËÐÐʱ£¬ÎÒÃDz¢Ã»ÓÐÈκΠitems¡£ÎÒÃÇÐèÒª×öµÄµÚÒ»¼þʾÍÊÇ´´½¨¸ù item¡£Äãͨ¹ý½«ËüÃDzåÈë
context À´Ôö¼Ó¹ÜÀí¶ÔÏó¡£
´´½¨¶ÔÏó
²åÈë¶ÔÏóµÄ·½·¨ËƺõºÜ±¿ÖØ£¬ÎÒÃÇͨ¹ý NSEntityDescription
µÄ·½·¨À´²åÈ룺
+ (id)insertNewObjectForEntityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context |
ÎÒÃǽ¨ÒéÄãÔö¼ÓÁ½¸ö·½±ãµÄ·½·¨µ½ÄãµÄÄ£ÐÍÀàÖУº
+ (NSString *)entityName
{
return @¡°Item¡±;
}
+ (instancetype)insertNewObjectInManagedObjectContext:(NSManagedObjectContext *)moc;
{
return [NSEntityDescription insertNewObjectForEntityForName:[self entityName]
inManagedObjectContext:moc];
} |
ÏÖÔÚ£¬ÎÒÃÇ¿ÉÒÔÏñÕâÑù²åÈëÎÒÃǵĸù¶ÔÏóÁË£º
Item *rootItem = [Item insertNewObjectInManagedObjectContext:managedObjectContext]; |
ÏÖÔÚ£¬ÔÚÎÒÃÇµÄ managed object context ÖÐÓÐÒ»¸öΨһµÄ item¡£Context
ÖªµÀÕâÊÇÒ»¸öвåÈë½øÀ´ÐèÒª±»¹ÜÀíµÄ¶ÔÏ󣬲¢ÇÒ±»¹ÜÀíµÄ¶ÔÏó rootItem ÖªµÀÕâ¸ö Context£¨ËüÓÐÒ»¸ö
-managedObjectContext ·½·¨£©¡£
±£´æ¸Ä±ä
ËäÈ»ÎÒÃÇÒѾ̸µ½ÕâÁË£¬¿ÉÊÇÎÒÃÇ»¹ÊÇûÓнӴ¥µ½³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷»ò³Ö¾Ã»¯´æ´¢¡£ÐµÄÄ£ÐͶÔÏó¡ªrootItem£¬½ö½öÔÚÄÚ´æÖС£Èç¹ûÎÒÃÇÏëÒª±£´æÄ£ÐͶÔÏóµÄ״̬£¨ÔÚÕâÖÖÇé¿öÏÂÖ»ÊÇÒ»¸ö¶ÔÏ󣩣¬ÎÒÃÇÐèÒª±£´æ
context£º
NSError *error = nil; if (! [managedObjectContext save:&error]) { // °¡£¬Å¶. ÓдíÎó·¢ÉúÁË :( } |
Õâ¸öʱºò£¬ºÜ¶àÊÂÇ齫Ҫ·¢Éú¡£Ê×ÏÈÊÇ managed object context ¼ÆËã³ö¸Ä±äµÄÄÚÈÝ¡£ÕâÊÇ
context µÄÖ°Ôð£¬×·×Ù³öÈκÎÄãÔÚ context ¹ÜÀí¶ÔÏóÖÐ×ö³öµÄ¸Ä±ä¡£ÔÚÎÒÃǵÄÀý×ÓÖУ¬ÎÒÃǵ½ÏÖÔÚ×ö³öµÄΨһ¸Ä±ä¾ÍÊDzåÈëÒ»¸ö¶ÔÏ󣬼´ÎÒÃǵÄ
rootItem¡£
Managed object context ½«ÕâЩ¸Ä±ä´«¸ø³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷£¬ÈÃËü½«ÕâЩ¸Ä±ä´«¸ø store¡£³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷»áе÷
store£¨ÔÚÎÒÃǵÄÀý×ÓÖУ¬store ÊÇÒ»¸ö SQL Êý¾Ý¿â£©À´½«ÎÒÃDzåÈëµÄ¶ÔÏóдÈëµ½´ÅÅÌÉ쵀 SQL
Êý¾Ý¿â¡£NSPersistentStore Àà¹ÜÀí×ÅºÍ SQLite µÄʵ¼Ê½»»¥£¬²¢ÇÒ²úÉúÐèÒª±»Ö´ÐеÄ
SQL ´úÂë¡£³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷µÄ½ÇÉ«¾ÍÊǼò»¯µ÷Õû store ºÍ context Ö®¼äµÄ½»»¥¹ý³Ì¡£ÔÚÎÒÃǵÄÀý×ÓÖУ¬Õâ¸ö½ÇÉ«Ï൱¼òµ¥£¬µ«ÊÇ£¬¸´ÔÓµÄÉèÖÿÉÒÔÓжà¸ö
stores ºÍ¶à¸ö contexts¡£
¸üйØÏµ
Core Data µÄÓÅÊÆÔÚÓÚ¹ÜÀí¹ØÏµ¡£ÈÃÎÒÃÇ×ÅÑÛÓÚ¼òµ¥µÄÇé¿ö£ºÔö¼ÓÎÒÃǵڶþ¸ö
item£¬²¢ÇÒʹËü³ÉΪ rootItem µÄ×Ó item£º
Item *item = [Item insertNewObjectInManagedObjectContext:managedObjectContext]; item.parent = rootItem; item.title = @"foo"; |
ºÃÁË¡£Í¬ÑùµÄ£¬ÕâЩ¸Ä±ä½ö½ö´æÔÚÓÚ managed object context
ÖС£Ò»µ©ÎÒÃDZ£´æÁË context£¬managed object context ½«»á֪ͨ³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷£¬ÏñÔö¼ÓµÚÒ»¸ö¶ÔÏóÒ»ÑùÔö¼Óд´½¨µÄ¶ÔÏóµ½Êý¾Ý¿âÎļþÖС£µ«ÕâÒ²½«»á¸üеڶþ¸ö
item ÓëµÚÒ»¸ö item Ö®¼äµÄ¹ØÏµ¡£¼Çס Item ʵÌåÊÇÈçºÎÓÐÒ»¸ö¸¸×Ó¹ØÏµµÄ¡£ËüÃÇÖ®¼äÓÐÏà·´µÄ¹ØÏµ¡£ÒòΪÎÒÃÇÉèÖõÚÒ»¸ö
item ΪµÚ¶þ¸ö item µÄ¸¸Ç×£¨parent£©Ê±£¬µÚ¶þ¸ö item ½«»á±ä³ÉµÚÒ»¸ö item µÄ¶ù×Ó£¨child£©¡£Managed
object context ×·×ÙÕâЩ¹ØÏµ£¬³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷ºÍ store ±£´æÕâЩ¹ØÏµµ½´ÅÅÌ¡£
»ñÈ¡¶ÔÏó
ÎÒÃÇÒѾʹÓÃÎÒÃǵijÌÐòÒ»»á¶ùÁË£¬²¢ÇÒÒѾΪ rootItem Ôö¼ÓÁËһЩ×Ó
items£¬ÉõÖÁÔö¼Ó×Ó items µ½×Ó items¡£È»¶ø£¬ÎÒÃÇÔÙ´ÎÆô¶¯ÎÒÃǵijÌÐò¡£Core Data
ÒѾ½«ÕâЩ items Ö®¼äµÄ¹ØÏµ±£´æµ½ÁËÊý¾Ý¿âÎļþ¡£¶ÔÏóͼÊdz־û¯µÄ¡£ÎÒÃÇÏÖÔÚÐèҪȡ³ö¸ù item£¬ËùÒÔÎÒÃÇ¿ÉÒÔÏÔʾµ×²ã
items µÄÁÐ±í¡£ÓÐÁ½ÖÖ·½·¨¿ÉÒÔ´ïµ½Õâ¸öЧ¹û¡£ÎÒÃÇÏÈ¿´¼òµ¥µãµÄ·½·¨¡£
µ± rootItem ¶ÔÏó´´½¨²¢±£´æÖ®ºóÎÒÃÇ¿ÉÒÔÏòËüÇëÇóËüµÄ NSManagedObjectID¡£ÕâÊÇÒ»¸ö²»Í¸Ã÷µÄ¶ÔÏ󣬿ÉÒÔΨһ´ú±í
rootItem¡£ÎÒÃÇ¿ÉÒÔ±£´æÕâ¸ö¶ÔÏóµ½ NSUSerDefaults£¬ÏñÕâÑù£º
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setURL:rootItem.objectID.URIRepresentation forKey:@"rootItem"]; |
ÏÖÔÚ£¬µ±³ÌÐòÖØÐÂÔËÐÐʱ£¬ÎÒÃÇ¿ÉÒÔÏñÕâÑù·µ»ØµÃµ½Õâ¸ö¶ÔÏó£º
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSURL *uri = [defaults URLForKey:@"rootItem"]; NSManagedObjectID *moid = [managedObjectContext.persistentStoreCoordinator managedObjectIDForURIRepresentation:uri]; NSError *error = nil; Item *rootItem = (id) [managedObjectContext existingObjectWithID:moid error:&error]; |
ºÜÃ÷ÏÔ£¬ÔÚÒ»¸öÕæÕýµÄ³ÌÐòÖУ¬ÎÒÃÇÐèÒª¼ì²é NSUserDefaults ÊÇ·ñÕæÕý·µ»ØÒ»¸öÓÐЧֵ¡£
¸Õ²ÅµÄ²Ù×÷ÊÇ managed object context ÒªÇó³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷´ÓÊý¾Ý¿âÈ¡µÃÖ¸¶¨µÄ¶ÔÏ󡣸ù¶ÔÏóÏÖÔÚ±»»Ö¸´µ½
context ÖС£È»¶ø£¬ÆäËûËùÓÐµÄ items ÈÔÈ»²»ÔÚÄÚ´æÖС£
rootItem ÓÐÒ»¸ö×Ó¹ØÏµ½Ð×ö children¡£µ«ÏÖÔÚÄǶù»¹Ã»ÓÐʲô¡£ÎÒÃÇÏëÒªÏÔʾ rootItem
µÄ×Ó item£¬Òò´ËÎÒÃÇÐèÒªµ÷Óãº
NSOrderedSet *children = rootItem.children; |
ÏÖÔÚ·¢ÉúµÄÊÇ£¬context ±ê×¢Õâ¸ö rootItem µÄ×Ó item ΪËùνµÄ¹ÊÕÏ¡£Core Data
ÒѾ±ê×¢Õâ¸ö¹ØÏµÎªÈÔÐèÒª±»½â¾ö¡£¼ÈÈ»ÎÒÃÇÒѾÔÚÕâ¸öʱºò·ÃÎÊÁËËü£¬context ½«»á×Ô¶¯ÅäºÏ³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷À´½«ÕâЩ×Ó
items ÔØÈëµ½ context ÖС£
ÕâÌýÆðÀ´¿ÉÄܷdz£²»ÖØÒª£¬µ«ÊÇÔÚÕâ¸öʱºòÕæÕý·¢ÉúÁ˺ܶàÊÂÇé¡£Èç¹ûÈκÎ×Ó¶ÔÏóżȻ·¢ÉúÔÚÄÚ´æÖУ¬Core Data
±£Ö¤»á¸´ÓÃÄÇЩ¶ÔÏó¡£ÕâÊÇCore Data ¶ÀÒ»ÎÞ¶þµÄ¹¦ÄÜ¡£ÔÚ context ÄÚ£¬´Ó²»»á´æÔÚµÚ¶þ¸öÏàͬµÄµ¥Ò»¶ÔÏóÀ´´ú±íÒ»¸ö¸ø¶¨µÄ
item¡£
Æä´Î£¬³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷ÓÐËü×Ô¼ºÄÚ²¿¶ÔÏóÖµµÄ»º´æ¡£Èç¹û context ÐèÒªÒ»¸öÖ¸¶¨µÄ¶ÔÏ󣨱ÈÈçÒ»¸ö×Ó
item£©£¬²¢Çҳ־û¯´æ´¢Ðµ÷Æ÷ÔÚ»º´æÖÐÒѾÓÐÐèÒªµÄÖµ£¬ÄÇô£¬¶ÔÏ󣨼´Õâ¸ö item£©¿ÉÒÔ²»Í¨¹ý store
¶ø±»Ö±½Ó¼Óµ½ context¡£ÕâºÜÖØÒª£¬ÒòΪ·ÃÎÊ store ¾ÍÒâζ×ÅÖ´ÐÐ SQL ´úÂ룬Õâ±ÈʹÓÃÄÚ´æÖдæÔÚµÄÖµÒªÂýºÜ¶à¡£
Ëæ×ÅÎÒÃDZéÀú item µÄ×Ó item£¬ÒÔ¼°×Ó item µÄ×Ó item£¬ÎÒÃÇÂýÂýµØ°ÑÕû¸ö¶ÔÏóͼÒýÓõ½ÁË
managed object context¡£¶øÕâЩ¶ÔÏó¶¼ÔÚÄÚ´æÖÐÖ®ºó£¬²Ù×÷¶ÔÏóÒÔ¼°´«µÝ¹ØÏµ¾Í»á±äµÃ·Ç³£¿ì£¬ÒòΪÎÒÃÇÖ»ÊÇÔÚ
managed object context Àï²Ù×÷¡£ÎÒÃǸú±¾²»ÐèÒª·ÃÎʳ־û¯´æ´¢Ðµ÷Æ÷¡£ÔÚÎÒÃÇµÄ Item
¶ÔÏóÉÏ·ÃÎÊ title£¬parent ºÍ children ÊǷdz£¿ì¶øÇÒ¸ßЧµÄ¡£
ÓÉÓÚËü»áÓ°ÏìÐÔÄÜ£¬ËùÒÔÁ˽âÊý¾ÝÔÚÕâЩÇé¿öÏÂÔõôȡ³öÀ´ÊǷdz£ÖØÒªµÄ¡£ÔÚÎÒÃÇÌØ¶¨µÄÇé¿öÏ£¬ÓÉÓÚÎÒÃDz¢Ã»½Ó´¥µ½Ì«¶àµÄÊý¾Ý£¬ËùÒÔÕâ²¢²»Ëãʲô£¬µ«ÊÇÒ»µ©ÄãÐèÒª´¦ÀíµÄÊý¾ÝÁ¿½Ï´ó£¬Ä㽫ÐèÒªÁ˽âÔÚ±³ºó·¢ÉúÁËʲô¡£
µ±Äã±éÀúÒ»¸ö¹ØÏµÊ±£¨±ÈÈçÔÚÎÒÃÇÀý×ÓÖÐµÄ parent »ò children
¹ØÏµ£©ÏÂÃæÈýÖÖÇé¿ö½«ÓÐÒ»ÖֻᷢÉú£º£¨1£©¶ÔÏóÒѾÔÚ context ÖУ¬ÕâÖÖ²Ù×÷»ù±¾ÉÏÊÇûÓÐÈκδú¼ÛµÄ¡££¨2£©¶ÔÏó²»ÔÚ
context ÖУ¬µ«ÊÇÒòΪÄã×î½ü´Ó store ÖÐÈ¡³ö¹ý¶ÔÏó£¬ËùÒԳ־û¯´æ´¢Ðµ÷Æ÷»º´æÁ˶ÔÏóµÄÖµ¡£Õâ¸ö²Ù×÷»¹ËãÁ®¼Û£¨µ«ÊÇ£¬Ò»Ð©²Ù×÷»á±»Ëø×¡£©¡£²Ù×÷ºÄ·Ñ×î°º¹óµÄÇé¿öÊÇ£¨3£©£¬µ±
context ºÍ³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷¶¼ÊǵÚÒ»´Î·ÃÎÊÕâ¸ö¶ÔÏó£¬ÕâÖÖÇé¿ö±ØÐëͨ¹ý store ´Ó SQLite
Êý¾Ý¿âÈ¡»Ø¡£×îºóÒ»ÖÖÇé¿ö±È£¨1£©ºÍ£¨2£©ÐèÒª¸¶³ö¸ü¶à´ú¼Û¡£
Èç¹ûÄãÖªµÀÄã±ØÐë´Ó store È¡»Ø¶ÔÏ󣨱ÈÈçÄãÒѾ֪µÀûÓÐÕâЩ¶ÔÏ󣩣¬µ±ÄãÏÞÖÆÒ»´ÎÈ¡»Ø¶àÉÙ¸ö¶ÔÏóʱ£¬½«»á²úÉúºÜ´óµÄ²»Í¬¡£ÔÚÎÒÃǵÄÀý×ÓÖУ¬ÎÒÃÇÏ£ÍûÒ»´ÎÐÔÈ¡³öËùÓÐ×Ó
items£¬¶ø²»ÊÇÒ»¸ö½ÓÒ»¸ö¡£ÎÒÃÇ¿ÉÒÔͨ¹ýÒ»¸öÌØ±ðµÄ¼¼ÇÉ NSFetchRequest¡£µ«ÊÇÎÒÃÇҪעÒ⣬µ±ÎÒÃÇÐèÒª×öÕâ¸ö²Ù×÷ʱ£¬ÎÒÃÇÖ»ÐèÒªÖ´ÐÐÒ»´ÎÈ¡³öÇëÇó£¬ÒòΪһ´ÎÈ¡³öÇëÇ󽫻áÔì³É£¨3£©·¢Éú£»Õ⽫×ÜÊǶÀÕ¼
SQLite Êý¾Ý¿âµÄ·ÃÎÊ¡£Òò´Ë£¬µ±ÐèÒªÏÔÖøÌáÉýÐÔÄÜʱ£¬¼ì²é¶ÔÏóÊÇ·ñÒѾ´æÔÚ½«±äµÃ·Ç³£ÓÐÒâÒå¡£Äã¿ÉÒÔʹÓÃ-[NSManagedObjectContext
objectRegisteredForID:]À´¼ì²âÒ»¸ö¶ÔÏóÊÇ·ñÒѾ´æÔÚ¡£
¸Ä±ä¶ÔÏóµÄÖµ
ÏÖÔÚ£¬ÎÒÃÇ¿ÉÒÔ˵£¬ÎÒÃÇÒѾ¸Ä±äÎÒÃÇÒ»¸ö Item ¶ÔÏóµÄ title£º
item.title = @"New title"; |
µ±ÎÒÃÇÕâÑù×öʱ£¬item µÄ title ¸Ä±äÁË¡£´ËÍ⣬managed object context
»á±ê×¢Õâ¸ö¶ÔÏó£¨item£©ÒѾ±»¸Ä±ä£¬ÕâÑùµ±ÎÒÃÇÔÚ context Öе÷Óà -save: ʱ£¬Õâ¸ö¶ÔÏ󽫻áͨ¹ý³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷ºÍ¸½ÊôµÄ
store ±£´æÆðÀ´¡£context×î¹Ø¼üµÄÖ°ÔðÖ®Ò»¾ÍÊǸú×ٸı䡣
´Ó×îºóÒ»´Î±£´æ¿ªÊ¼£¬context ÖªµÀÄÄЩ¶ÔÏó±»²åÈ룬¸Ä±äÒÔ¼°É¾³ý¡£Äã¿ÉÒÔͨ¹ý -insertedObjects,
-updatedObjects, ÒÔ¼° ¨CdeletedObjects ·½·¨À´´ïµ½ÕâÑùµÄЧ¹û¡£Í¬ÑùµÄ£¬Äã¿ÉÒÔͨ¹ý
-changedValues ·½·¨À´Ñ¯ÎÊÒ»¸ö±»¹ÜÀíµÄ¶ÔÏóÄÄЩֵ±»¸Ä±äÁË¡£Õâ¸ö·½·¨ÕýÊÇ Core Data
Äܹ»½«Äã×ö³öµÄ¸Ä±äÍÆÈëµ½Êý¾Ý¿âµÄÔÒò¡£
µ±ÎÒÃDzåÈëÒ»¸öÐ嵀 Item ¶ÔÏóʱ£¬Core Data ÖªµÀÐèÒª½«ÕâЩ¸Ä±ä´æÈë store¡£ÄÇô£¬½«Äã¸Ä±ä¶ÔÏóµÄ
title ʱ£¬Ò²»á·¢ÉúͬÑùµÄÊÂÇé¡£
±£´æ values ÐèҪе÷³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷ºÍ³Ö¾Ã»¯ store ÒÀ´Î·ÃÎÊ SQLite Êý¾Ý¿â¡£ºÍÔÚÄÚ´æÖвÙ×÷¶ÔÏó±ÈÆðÀ´£¬È¡³ö¶ÔÏóºÍÖµ£¬·ÃÎÊ
store ºÍÊý¾Ý¿âÊǷdz£ºÄ·Ñ×ÊÔ´µÄ¡£²»¹ÜÄã±£´æÁ˶àÉÙ¸ü¸Ä£¬Ò»´Î±£´æµÄ´ú¼ÛÊǹ̶¨µÄ¡£²¢ÇÒÿ¸ö±ä»¯¶¼Óгɱ¾¡£ÕâÊÇ
SQLite µÄ¹¤×÷·½Ê½¡£µ±Äã×öºÜ¶à¸ü¸ÄµÄʱºò£¬ÐèÒª½«¸ü¸Ä´ò°ü£¬²¢ÅúÁ¿¸ü¸Ä¡£Èç¹ûÄã±£´æÃ¿Ò»´Î¸ü¸Ä£¬½«Òª¸¶³öºÜ¸ßµÄ´ú¼Û£¬ÒòΪÄãÐèÒª¾³£×ö±£´æ²Ù×÷¡£Èç¹ûÄãºÜÉÙ×ö±£´æ£¬ÄÇôÄ㽫»áÓÐÒ»´óÅú¸ü¸Ä½»¸ø
SQLite ´¦Àí¡£
ͬÑùÐèҪעÒâµÄÊDZ£´æ²Ù×÷ÊÇÔ×ÓÐԵģ¬ÒªÃ´ËùÓеĸü¸Ä»á±»Ìá½»¸ø store/SQLite Êý¾Ý¿â£¬ÒªÃ´Èκθü¸Ä¶¼²»±»±£´æ¡£µ±ÊµÏÖ×Ô¶¨Òå
NSIncrementalStore »ùÀàʱ£¬ÕâÒ»µãÒ»¶¨ÒªÀμÇÔÚÐÄ¡£ÒªÃ´È·±£±£´æÓÀÔ¶²»»áʧ°Ü£¨±ÈÈç˵²»»á·¢Éú³åÍ»£©£¬ÒªÃ´µ±±£´æÊ§°Üʱ£¬Äã
store µÄ»ùÀàÐèÒª»Ö¸´ËùÓеĸı䡣·ñÔò£¬ÔÚÄÚ´æÖеĶÔÏóͼ×îÖպͱ£´æÔÚ store ÖеĶÔÏó²»Ò»Ö¡£
Èç¹ûÄãʹÓÃÒ»¸ö¼òµ¥µÄÉèÖ㬱£´æ²Ù×÷ͨ³£²»»áʧ°Ü¡£µ«ÊÇ Core Data ÔÊÐíÿ¸ö³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷Óжà¸ö
context£¬ËùÒÔÄã¿ÉÄÜÏÝÈë³Ö¾Ã»¯´æ´¢Ðµ÷Æ÷²ã¼¶µÄ³åͻ֮ÖС£¸Ä±äÊǶÔÓÚÿ¸ö context µÄ£¬ÁíÒ»¸ö
context µÄ¸ü¸Ä¿ÉÄܵ¼Ö³åÍ»¡£Core Data ÉõÖÁÔÊÐíÍêÈ«²»Í¬µÄ¶ÑÕ»·ÃÎÊ´ÅÅÌÉÏÏàͬµÄ SQLite
Êý¾Ý¿â¡£ÕâÃ÷ÏÔÒ²»áµ¼Ö³åÍ»£¨±ÈÈ磬һ¸ö context ÏëÒª¸üÐÂÒ»¸ö¶ÔÏóµÄÖµ£¬¶øÁíÒ»¸ö context
ÏëҪɾ³ýÕâ¸ö¶ÔÏ󣩡£ÁíÒ»¸öµ¼Ö±£´æÊ§°ÜµÄÔÒò¿ÉÄÜÊÇÑéÖ¤¡£Core Data Ö§³Ö¸´ÔӵĶÔÏóÑéÖ¤²ßÂÔ¡£ÕâÊÇÒ»¸ö¸ß¼¶»°Ìâ¡£Ò»¸ö¼òµ¥µÄÑéÖ¤¹æÔò¿ÉÄÜÊÇ£º
Item µÄ title ²»Äܳ¬¹ý300¸ö×Ö·û¡£µ«ÊÇ Core Data Ò²Ö§³Öͨ¹ýÊôÐÔ½øÐи´ÔÓµÄÑéÖ¤²ßÂÔ¡£
½áÊøÓï
Èç¹û Core Data ¿´ÆðÀ´ÈÃÈ˺¦Å£¬Õâ×îÓпÉÄÜÊÇÒòΪËüµÄÁé»îÐÔÔÊÐíÄã¿ÉÒÔͨ¹ý·Ç³£¸´Ôӵķ½·¨Ê¹ÓÃËü¡£Ê¼ÖÕ¼Çס£º¾¡¿ÉÄܱ£³Ö¼òµ¥¡£Ëü»áÈÿª·¢±äµÃ¸üÈÝÒ×£¬²¢ÇÒ°ÑÄãºÍÄãµÄÓû§´ÓÂé·³ÖÐÕü¾È³öÀ´¡£³ý·ÇÄãÈ·ÐÅËü»á´øÀ´°ïÖú£¬²ÅȥʹÓøü¸´ÔӵĶ«Î÷£¬±ÈÈç˵ÊÇ
background contexts¡£
µ±Ä㿪ʼʹÓÃÒ»¸ö¼òµ¥µÄ Core Data ¶ÑÕ»£¬²¢ÇÒʹÓÃÎÒÃÇÔÚÕâÆªÎÄÕÂÖн²µ½µÄ֪ʶ°É£¬Ä㽫ºÜ¿ì»áÕæÕýÌå»áµ½
Core Data ÄÜΪÄã×öʲô£¬²¢ÇÒѧµ½ËüÊÇÔõôËõ¶ÌÄ㿪·¢ÖÜÆÚµÄ¡£
|