星空网 > 软件开发 > 操作系统

iOSDay37数据处理之CoreData

1. CoreData数据库框架的优势

 1> CoreData历史

  CoreData数据持久化框架是Cocoa API 的一部分,首次在iOS5版本的系统中出现,它允许按照实体-属性-值模型组织数据,并以

  CoreData主要提供对象 --- 关系映射(ORM)功能,把OC对象转化为数据保存到文件,也可以数据转化为OC对象。

 2> CoreData数据库与Sqlite数据库的比较

  Sqlite:

  • 基于C接口,需要使用sql语句,但是代码较为繁琐

  • 在处理大量数据时,表关系更为直观

  • 在OC中不是可视化的

  • 可以跨平台使用(iOS和安卓)

  CoreData:

  • 可视化,有undo/redo能力

  • 可以实现多种文件格式NSSQLiteStoreType、NSBinaryStoreType、NSInMemoryStoreType、NSStoreType

  • 苹果官方API支持,与iOS结合更紧密

  • 不能跨平台使用,只支持iOS

 3> CoreData核心对象及关系实例(以一个餐馆为例)

  iOSDay37数据处理之CoreDataimages/loading.gif' data-original="data:image/jpeg;base64,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

2. CoreData数据库框架的核心对象

 1> 被管理对象上下文(NSManagedObjectContext)

  NSManagedObjectContext:被管理对象上下文,CoreData中用于操作和使用数据,负责应用和数据库之间的交互,可以进行增、删、改、查

  数据的保存需要 NSManagedObjectContext 进行 save 操作

  数据的查询需要 NSManagedObjectContext 进行 executeFetchRequest 操作(返回值是数组)

  CoreData提供的是对象关系映射,NSManagedObjectContext操作的都是NSManagedObject对象

 2> 被管理对象相关类

  NSManagedObjectModel:被管理对象模型,管理多个对象

  NSManagedObject:被管理对象,CoreData返回的数据类型,被管理的对象是根据是根据实体描述生成的

  NSEntityDescription:实体描述类,根据实体创建被管理对象,可以映射出对象

  Entity:实体类,实体是对文件数据的描述。被管理对象表示实体,实体包含名称,属性(字段)和关系,实体的名称通常和被管理对象名一致

 3> 持久化存储和存储文件

  数据连接器类:NSPersistentStoreCoordinator,持久化存储调节器,它想要去SQLite数据库中拿数据必须通过NSPersistentStore。

  NSPersistentStore:持久化存储,是对实际文件的一种。Objective-C表示方式,一个被封装好的底层类,用于存储数据

  存储文件:用来存储和管理数据的文件,iOS支持4种存储类型:NSSQLiteStoreType、NSBinaryStoreType、NSInMemoryStoreType、NSStoreType

 4> 数据查询

  NSFetchRequest:查询请求,可以做排序操作,也可以使用谓词

  NSManagedObjectModel根据NSFetchRequest查询数据,以数组形式返回,数组中包含被管理对象(NSManagedObject)

  NSSortDescriptor:排序操作

3. CoreData数据库的简单操作 

 1> 创建步骤

  ① 创建带有CoreData数据库的工程

  iOSDay37数据处理之CoreData

  ② 创建实体类与属性

iOSDay37数据处理之CoreData

iOSDay37数据处理之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

 

  ④ 创建实例类

    iOSDay37数据处理之CoreData

iOSDay37数据处理之CoreData

 4> 添加对象(详解请看注释)

 1 - (void)addPerson 2 { 3   // 添加的步骤 4   // 1. 创建Person实体对象,然后开始"context",让它做好准备,将这个对象添加到数据库 5    6   /** 7    * 实例对象有两种[初始化实体对象需要借用NSEntityDescription] 8   */ 9   10   // 第一种:11 //  Person *per = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.managedObjectContext];12   // 第二种:13   // 先创建一个实体14   NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext];15   // 创建Person对象16   Person *per = [[Person alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:self.managedObjectContext];17   18   // 2. 给对象属性赋值19   per.personName = @"MBBoy";20   per.personGender = @"Unkown";21   per.personAge = @10;22 23   // 3. 将对象存入数据库24   BOOL result = [_managedObjectContext save:nil];25   26   per.personCar = carSet;27   28   // 4. 判断是否插入成功(在AppDelegate中打印地址)29   if (result) {30     NSLog(@"添加数据成功");31   } else {32     NSLog(@"添加数据失败");33   }34 }

 5> 删除对象(详解请看注释)

 1 - (void)deletePerson 2 { 3   // 1. 实体化请求类【查询】 4   NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; 5    6   // 2. 获取删除的条件(NSPredicate) 7   request.predicate = [NSPredicate predicateWithFormat:@"personName = 'MBBoy'"]; 8    9   // 3. 由context根据删除条件的请求去具体进行删除操作10   NSArray *resultArray = [self.managedObjectContext executeFetchRequest:request error:nil];11   12   // 为了代码的严密需要判断resultArray中是否有值13   if (0 == resultArray.count) {14     NSLog(@"未找到删除对象");15   } else {16     // 4. 遍历搜索出来结果17     for (Person *per in resultArray) {18       // 删除查询到相关的人的信息19       [self.managedObjectContext deleteObject:per];20     }21     22     // 5. 进行删除结果的判断,保存后删除操作才会写入文件23     BOOL result = [_managedObjectContext save:nil];24     if (result) {25       NSLog(@"删除数据成功");26     } else {27       NSLog(@"删除数据失败");28     }29   }30 }

 6> 更改对象(详解请看注释)

 1 - (void)updatePerson 2 { 3   // 1. 实体化请求类【查询】 4   NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; 5    6   // 2. 设置查询的条件 7   request.predicate = [NSPredicate predicateWithFormat:@"personName = 'MBBoy'"]; 8    9   // 3. 由context根据查询条件的请求去具体进行更新操作10   NSArray *resultArray = [self.managedObjectContext executeFetchRequest:request error:nil];11   12   // 为了代码的严密需要判断resultArray中是否有值13   if (0 == resultArray.count) {14     NSLog(@"未找到更改对象,请检查谓词条件!");15   } else {16     // 4. 遍历搜索结果17     for (Person *per in resultArray) {18       19       // 更新查询到相关的人的信息20       per.personName = @"小强";21       per.personGender = @"卵男";22       per.personAge = @38;23     }24     25     // 5. 进行删除结果的判断26     BOOL result = [_managedObjectContext save:nil];27     if (result) {28       NSLog(@"更改数据成功");29     } else {30       NSLog(@"更改数据失败");31     }32   }33 }

 7> 查询对象(详解请看注释)

 1 - (void)selectPerson 2 { 3   // 1. 实体化请求类【查询】 4   NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; 5    6   // 2. 设置查询的条件 7   request.predicate = [NSPredicate predicateWithFormat:@"personName like '*B*'"]; 8    9   // 3. 根据管理对象上下文执行相关的操作10   NSArray *resultArray = [self.managedObjectContext executeFetchRequest:request error:nil];11   12   if (0 == resultArray.count) {13     NSLog(@"未找到查询对象,请检查谓词条件!");14   } else {15     for (Person *per in resultArray) {16       NSLog(@"name = %@, gender = %@, age = %@", per.personName, per.personGender, per.personAge);17     }18   }19 }

  补: 查询结果的排序

1   // 设置排序方式2   NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"address" ascending:NO];3   request.sortDescriptors = @[sort];

4. CoreData数据库表关联操作 

 1> 添加表关系可视化操作

  Car数据库与Person数据库建立关联:

  iOSDay37数据处理之CoreData

 2> 添加表关系代码操作

 1   // 创建Person对象 2   Person *per = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.managedObjectContext]; 3   // 2. 给对象属性赋值 4   per.personName = @"MBBoy"; 5   per.personGender = @"Unkown"; 6   per.personAge = @10; 7    8   ///// 将车的对象通过实体描述类创建出来 9   Car *audiCar = [NSEntityDescription insertNewObjectForEntityForName:@"Car" inManagedObjectContext:self.managedObjectContext];10   11   audiCar.price = @300000;12   audiCar.color = @"白色";13   audiCar.brand = @"奥迪A7";14   15   Car *benchiCar = [NSEntityDescription insertNewObjectForEntityForName:@"Car" inManagedObjectContext:self.managedObjectContext];16   17   benchiCar.price = @500000;18   benchiCar.color = @"红色";19   benchiCar.brand = @"奔驰SUV";20   21   // 将两辆车放到集合中存储,然后进行赋值22   NSSet *carSet = [NSSet setWithObjects:audiCar, benchiCar, nil];23   24   // 3. 将对象存入数据库25   BOOL result = [_managedObjectContext save:nil];26   27   // 建立一对多关系28   per.personCar = carSet;29 30   // 4. 判断是否插入成功(在AppDelegate中打印地址)31   if (result) {32     NSLog(@"添加数据成功");33   } else {34     NSLog(@"添加数据失败");35   }

 

  补: 一对多表关系时CoreData自动生成基本操作方法

1 // 添加人与一辆车之间的关系2 - (void)addPersonCarObject:(NSManagedObject *)value;3 // 删除人与一辆车之间的关系4 - (void)removePersonCarObject:(NSManagedObject *)value;5 // 添加人与一组车之间关系6 - (void)addPersonCar:(NSSet<NSManagedObject *> *)values;7 // 删除人与一组车之间关系8 - (void)removePersonCar:(NSSet<NSManagedObject *> *)values;

  注:此处只是表间关系删除,并不会删除文件内数据

 

5. CoreData数据库数据的迁移

 1> 概述

   CoreData 支持随着App开发演进而带来的对象模型(NSManagedObjectModel)升级或修改的管理。模型的改变将导致不兼容(或不能打开)以前版本创建的存储。如果你要改变你的模型,你就必须要改变现有存储中的数据 - 即数据存储格式(store format)——这被称为数据迁移(migration)

 2> 数据迁移的三个阶段

  • 创建基于源实例对象的目标实例对象;

  iOSDay37数据处理之CoreDataSAXCSM74KMuq7HiiQijUC/ZrPvb8xgdZ7eWLS/zVuOP0REoOLoUHeQrd5LWP2E8lZR7YhteuGe4iAK73xlY8sJANPXgt+BEIiLu+VS+mG4hIpCCkR36Ofpjqy6Hzvgg+R20+n4NInqNlz292/Dne5tC9/9J6b9dZnUeugBxf+ljRE2OJoxH30nA6pR5iCgasuEyN0X6229GkXv7WfgLxhja8x8m2onwSAKVgoD751ul6NQv3AmKll8YOJvzLQH3X2pn0VJaywUSqbhUOwDBblETj/UumV/ZHxAcXOoekIKCAnmE2r9sfj02VobMS7nIOncB8AtAw9CgMlQo3YT/5bl0RrQggV+SgPvn2y/ZdmVp6ycG2ytL99kPEvAeAS1Aypy0uCmjeUCAW4ijzI2Uw7B2MBo2LGOHyuGWpiRAAiRQmQhwT0tluhvsCwmQAAmQAAmQQIkEGGkpEQ0LqgMBLnFUh7vIMZAACZCASYCihe+EakdAr/sykQAJkAAJVD8C3Ihb/e4pR0QCJEACJEAC1ZIA97RUy9vKQZEACZAACZBA9SNA0VL97ilHRAIkQAIkQALVkgBFS7W8rRwUCZAACZAACVQ/AhQt1e+eckQkQAIkQAIkUC0JULRUy9vKQZEACZAACZBA9SNA0VL97ilHRAIkQAIkQALVkgBFS7W8rRwUCZAACZAACVQ/AhQt1e+eckQkQAIkQAIkUC0JULRUy9vKQZEACZAACZBA9SNA0VL97ilHRAIkQAIkQALVkgBFS7W8rRwUCZAACZAACVQ/AhQt1e+eckQkQAIkQAIkUC0JULRUy9vKQZEACZAACZBA9SNA0VL97ilHRAIkQAIkQALVkgBFS7W8rRwUCZAACZAACVQ/An7Vb0gcUU0loJTCxYsXcf78eeTm5uLChQvQeUwkQAIkUBUJWCwW1K1bF8HBwahXrx7q1KkDnVeTk0U+1PmpXpPfAdVo7FqkfP/994ZYueaaa1C/fv1qNDoOhQRIoCYSOHfuHE6ePGmIl2uvvdY41kQO9jFzechOgscqT0BHWHSk5eabb6ZgqfJ3kwMgARLQBPQfX/ozzR5FrulUKFpq+jugGo1fi5arrrqqGo2IQyEBEiABk4D+bNOfcTU9UbTU9HdANRp/Xl4ewsLCKtGI8pGTb61E/WFXSIAEqioB/dmmP+NqeqJoKe874GwqElesQEJCguO1fk8q8svr5+fa5ydjsGzIWpic83M9VVz9cowhJzleNqANxv4rDPfSpUuljiXz4CdY9slBFJMS1tPYsOxdfJHpvTt5dNlQ3HFrPxy8Qp9L7bDDwIqUDcvw/OjRGP38LHz4xQlHSfETKw5++DpGDx8utnPxxYkrjak8tsVbYg4JkIB3CGzcuBH33Xcf9LGkVJbPuJLqVpd8ipZy3smcrzcgZsgQPPLII45Xny63IOjJFfDK3FTm/hQiU2wvFhabfsvsoeINyzOGC9JdPeKSU1n2lFsztmPmc6Ox96yrn5xD7+OZmS/hWy/iDGkZhW5RfdAo0LWtn3L1xev90P+ZmTgR1AhBJ5ZiyuO98PyHxzy62jW3HwZOeQ0/XH898nctxuO9orAh0/PAymPrsTFmkgAJ/GwCW7duxcyZM9G0aVPjqK89pbJ8xnmqV53yKFrKezf960iNSOzLVsbjtErlYXvsIGDxm/j3L6FarLbJx98foeXte2Wxr8Ax3Hjv4+iIM1iz64QTDSt2r34NCH8O993oBYVh89yk2x+wZMHTuPHnfrFA/kFMfy0NUS+twbv/Nw3/9+6XmBkFJM5dDzftBZzeguGL0xD9UgLenTYNS7atxYBGZ/DM/M3Fo0vlsXWixVMSIAHvEfj888/x8ssv48EHH0R8fLxx1Nc6n6k4AYqW4kzKluOYiALRva/MIDjlqHds00LEyNKNfp7eYmmLOYmpjrL84zswJcZeZsG4Vzc5IjTWzD2uZfF7nCaa01gxJQYWESva75Q3ViPN4bX4ie5DT0cfeuLV9fa/yvORMK4nnpyzEFN62vsRgxX7Txd3Ijl6WaZnzHQsnC5tG/5isD71OBKn97RdW2R8dt9Aye1q96WN4SwS5wx2+G07+FUc87YQDIzAUwNkwl+41cEd+al47z0gemQvhEgvrZlfYOqjrdG6tfl6ftkXtvuQjw+ffwDDZ83F6G66rBu+kP4d3fA6HrDZtu72KJZ9kakHi5yUZej26DJHO+5+h8/6xCY6TL+j576JqQ/Y230U7x6035MgdOsWheiuLQ2/kF52uLOj7dz1cGzHB5LREY/HRJgFfi3x+J+0wnkPqW6rROWxdW2FVyRAAt4iMHXqVPTs2RNjx441Pvv08Z577sFLL73krSaqlx/9PS1MZSeQnRQn32vTRq3al6bS0tJU0r51alo0FEYsV1naTfZu1QZQkdPWqPSMdLUxbqz+Hhy1JqNQF6q3tG10rDqScUodWTfbKIuVsI0qTFNjxQ6DZqvtSUfU7jVm2aDlaUbnNk5uY7Qbu26fOiJtGrZiH7vPaNWwsf/I3qf7CDVo9ip1JP2IWjN7kHE9bWNGUR+kfPKq3SrtyG41W/cJ05QudU/meGU8k5erJG07SNtCtRn7lkpKS1LLJ0fKdbTalyeju2K7SpU2hu3T9Bgj1Vsbk1Ra0jo1QtpBZKzB1exHpNKoSkrJycklFbnkZx9arFq16qo2nzKzT+38m1z3VXu1b7kPE1q1Uq2G/U3tPJSq9n6sy1qpYSv1fchWSwdImVw/vfhjtfdAqsrO2qu6yvWElTvVqazj6oMXu0r5MJWqeRxYIOcLpJaT374vqs2H0tSBzYuNeq0mfKwKnfy++MFelZa6V/3NaGemx3uiCo+rmV2lH0/ruq7pwIK+qlXXxWabtqI8Y7y28TmZl8fWqRpPSYAEvEhA9ql49OYpv6yfcR4dVpNMvcTBVA4C9klcT9zOLy1S7PNpYWGh0i/Z6a3yMrarSLGdbYiLLBXbRuqJaEnLyrZNOGIr7dv9rkmTfKmnJ7I1I8R20HLxs09Fi4+xa9KLepq13RBHnkSLMflHximZN20pzxBLbaZtl+tsFRcpfidvtBeqwiNa5ESq3fYBOEp0v2KlbIQypZMshtlstUgxUsYqR90rtlvaGPKSjDEOeitJxi7cBEr6xmkO394ULUodVy86hIhSHz9dJABMQdNKfex0H4zyYStVvrBb3FdsZ+4sIpTxL0PETFh5QGXpTksy7r8csw8ViRbzvKva6aQxM/71otR9Wh3Nt/l9cbNR3/CRqoVVcaGhRMItHaaF09PqkP0eOGopdWhxcdFijqmvOuB2f8tj69QET0mABCqIAEWLUlweEuVR/hQJmeBte1oUstLWIXRqDIbEJwP5x/H2hPvgL8s4QUFBCGraA1ulAXOnRBgGLluFQWljEN4wFP6y3DJ4ytvIcArbx4RLvtTzt4QiZrFUzMxBgWxjyZbTVs0bys+idLjo1OnsLA6+dxiRD91ha1MXBaJLv2gcnnoQP9osI69t4KiTf9E89XfkuJ20iUBjW5bVZutYtwprgUhdZrlyu2dLG4O10GjhnWEdZOzCzd+C5lFTJU94GCXe/HEj+v0pHLte2yKPJKdg+UaRZY93g2PFT5p6ru8diLj1VkS0vgPPSTlOnkeBrQvhoUFFnWnSHcumDEDiSwPR5dYIWTJ6ALGJh4rKHWd15ewGBDk1EtbsBslLx4/m0BHe2Ome2PJcx34W747ugpm7OiJu83xEeNh+U6j3K+OC4/boK3uyubRfojy2jko8IQES8CqBy5cve/RXUr5H4xqUSdHyE2+2v/Pk0/Ju9IkE0k7lIXPbfAybH4qN6VmmqMnebU7qtnau7tQfK/6tUJidhfR9q5A5axh+v3i/lGo10Abbs4rEkIRckP3pHxAWGIybpPSoCBhH8vN38evIRxjufLwNtn6U7PQYthX7NybKzNwc9YoMy37mWR251ldXbjektDFI+TXicfK6DIcYlJgFsrPfRQe90cTLqd1DI4Ez8VjwxkJ8hWj0u83+/S561m+EJbtTkZpqe6UcxJerfo8iSeHcmUDhPc2w/XL3ZiyZ0hyLpwzE+hOi0pyToRDOw1k4FPxg37PibFjSeY7sp+mClzZ2xJId76JnE6c3oFOV69t0k3G9g8NOO3TTtq0WizbFnmIqj61TEzwlARLwIoHevXtj7ty5xueeditBHONa5zMVJ0DRUpxJGXJOITUp2ZiokpP3IGHOGIzaCvS65Tpb3WycPSevzFTEvzjciLQYBdZU47tV2k5JwFm/EIQ2CDOeALqpSQOEtOgmU+dh9Ji4EKmnc3D62CYM9g9C6IxtgF8z9JIHlOb3GYWE/cdxOjMZc4Z0KfLr1uMbb48Btg7DjPgdyDydiT0rZmLIO7Jr5bEuLtEEt2o/+/KK7ZY2Bl0+ApjVZwISkzORc/Y4VozrgNDQMUhzmv+dJ/2f02G/Jt3wXPgZLF28EeEj+qOlTQOENOtqPF00/IU3cdS4D/I0TsStuGP2Do/N5aS8aWzYnbvhGAJDwlC/XiOxa4TgQFdRERKu/abh8bGvIyXzNE6kfILnhi8FooahfamiLAefTO2NKaI7o1/6E67NSkGKCKmDB48am3yt8hTQo7Ip+PVdmbj6rt+imzwdNfy5N2UTcw4yv1iGgfLkUcfnHjfGeOKTqWjdbSqOSnSvNFuPA2YmCZCAVwnoDbfr16/H/PnzDcGij/qaG3FLwFxBS3NVtln73hPBKfst7K9INXvVPnOPSmGGihuhN5SaZdFjRxh7T+KSzA0F6etijWt7eaRsaE237U3IPrLG2NdhL2szQva+2Pct5KXZNsyafgfFLlfTIvVGXLeNCgbZQpW0arKjD9rf5OW2/sm+DL0ZODJ2n+Me5KUtF1vZTOvBlbGnpU2s1DKTOX4nW9mrEunYD3OldqV+aWMoTHdhBwxSq5LMTSBmuyPUEfedp45RKFXe9d7jH+s9Ja3UBw7ItjGmfqwGSL4u06+uTy+w3QdzI27fBQecWs2SzbcDHLbafqbsbzH2Kek9LV1tG3GlRnbav9QwF7+L1XHj/hb3m5e2UnwOMPehZB9w6Y+9X/Y9L3mp2lY2A3983OhXtvS/r1M7fSd8YG4Sl9JDS4eJ7TB1wP6eu4Kt0yB5SgIk4EMC8oVySp4gUk888YRx/Oyzzzy2Vt7POI9Oqngm/8uzzOi+SNb8fFkK8Eeg21/cZltW5OfIn7p+gR7L8+UvZKuUhXiomy9+reLXU1mxccj3oeQXSmzCX9px/cO/mKlXM0ppt7QxaHb62+9DQjxs2rhCRw8dOoR27dpdwaJ8RVe6D8U8Wc2v7A8MCSk1mlXa+Iv5/ikZVonWnZVdOH4BuDqslFBOeWx/Sl9YhwRIoFQC+ptw58yZg4kTJyIqKsqjvbc/4zw2UskzKVoq+Q1i98pOICUlBRERtu8nKXs1WpIACZBAlSDAzziAe1qqxFuVnSwLgYCAAJw5c6YsprQhARIggSpFQH+26c+4mp4oWmr6O6Aajb9evXrIyMioRiPiUEiABEjAJKA/2/RnXE1PFC01/R1QjcbfoIH5UPKBAwfwww8/VKORcSgkQAI1lYD+LNOfaTrZP+NqKgs9bu5pqcl3v5qNXTbF4/z58/juu++MZSL5RmLwC5qq2U3mcEigBhGoVauW8SWljRo1wnXXXWdEWvT/gKvJiaKlJt/9ajp2LV6s8gSTFiz6nIkESIAEqiIBLVC0cPHz8zP+mWJVHIO3+0zR4m2i9EcCJEACJEACJOATAtzT4hOsdEoCJEACJEACJOBtAhQt3iZKfyRAAiRAAiRAAj4hQNHiE6x0SgIkQAIkQAIk4G0CFC3eJkp/JEACJEACJEACPiFA0eITrHRKAiRAAiRAAiTgbQIULd4mSn8kQAIkQAIkQAI+IUDR4hOsdEoCJEACJEACJOBtAhQt3iZKfyRAAiRAAiRAAj4hQNHiE6x0SgIkQAIkQAIk4G0CFC3eJkp/JEACJEACJEACPiFA0eITrHRKAiRAAiRAAiTgbQIULd4mSn8kQAIkQAIkQAI+IUDR4hOsdEoCJEACJEACJOBtAhQt3iZKfyRAAiRAAiRAAj4hQNHiE6x0SgIkQAIkQAIk4G0CFC3eJkp/JEACJEACJEACPiFA0eITrHRKAiRAAiRAAiTgbQIULd4mSn8kQAIkQAIkQAI+IUDR4hOsdEoCJEACJEACJOBtAhQt3iZKfyRAAiRAAiRAAj4hQNHiE6x0SgIkQAIkQAIk4G0CFC3eJkp/JEACJEACJEACPiFA0eITrHRKAiRAAiRAAiTgbQIULd4mSn8kQAIkQAIkQAI+IUDR4hOsdEoCJEACJEACJOBtAhQt3iZKfyRAAiRAAiRAAj4hQNHiE6x0SgIkQAIkQAIk4G0CFC3eJkp/JEACJEACJEACPiFA0eITrHRKAiRAAiRAAiTgbQIULd4mSn8kQAIkQAIkQAI+IUDR4hOsdEoCJEACJEACJOBtAhQt3iZKfyRAAiRAAiRAAj4hQNHiE6x0SgIkQAIkQAIk4G0CFC3eJkp/JEACJEACJEACPiFA0eITrHRKAiRAAiRAAiTgbQIULd4mSn8kQAIkQAIkQAI+IUDR4hOsdEoCJEACJEACJOBtAhQt3iZKfyRAAiRAAiRAAj4hQNHiE6x0SgIkQAIkQAIk4G0CFC3eJkp/JEACJEACJEACPiFA0eITrHRKAiRAAiRAAiTgbQIULd4mSn8kQAIkQAIkQAI+IUDR4hOsdEoCJEACJEACJOBtAhQt3iZKfyRAAiRAAiRAAj4hQNHiE6x0SgIkQAIkQAIk4G0CFC3eJkp/JEACJEACJEACPiFA0eITrHRKAiRAAiRAAiTgbQIULd4mSn8kQAIkQAIkQAI+IUDR4hOsdEoCJEACJEACJOBtAhQt3iZKfyRAAiRAAiRAAj4hQNHiE6x0SgIkQAIkQAIk4G0CFC3eJkp/JEACJEACJEACPiFA0eITrHRKAiRAAiRAAiTgbQIULd4mSn8kQAIkQAIkQAI+IUDR4hOsdEoCJEACJEACJOBtAhQt3iZKfyRAAiRAAiRAAj4h8P9XLOPdGe5PkAAAAABJRU5ErkJggg==" />

  • 重新建立联系;

iOSDay37数据处理之CoreData

IOS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

tiktok剪辑软件:https://www.goluckyvip.com/tag/82565.html
tiktok免把卡教程:https://www.goluckyvip.com/tag/82566.html
tiktok教学课程:https://www.goluckyvip.com/tag/82567.html
tiktok安卓登录方法:https://www.goluckyvip.com/tag/82568.html
tiktok下载官网下载:https://www.goluckyvip.com/tag/82569.html
tiktok安卓手机:https://www.goluckyvip.com/tag/82570.html
精简版TikTok在法国、西班牙上线,引发欧盟风险质疑:https://www.kjdsnews.com/a/1842206.html
精简版TikTok在法国、西班牙上线,引发欧盟风险质疑:https://www.goluckyvip.com/news/219224.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流