【问题标题】:How to save and retrieve two arrays in Core Data in iOS6iOS6如何在Core Data中保存和检索两个数组
【发布时间】:2013-09-02 13:50:38
【问题描述】:

我有两个数组

  1. retrievedNamesMutableArray
  2. retrievedImagesArray

我保存在核心数据中。虽然保存操作成功,但当我获取数据时,它似乎获取名称或图像,但不能同时获取。我假设我可以在 Core Data 中存储一个 NSDictionary,但似乎无法找到一种方法。

这就是我正在做的保存到 Core Data 的操作。

  -(void)saveToPhoneDatabase
{
   AddressBookAppDelegate *appDelegate =[[UIApplication sharedApplication]delegate];
   NSManagedObjectContext *context = [appDelegate managedObjectContext];
   NSManagedObject *newContact;

  /* I assume this can be done but can't figure out proper process.
   NSMutableDictionary *dictionary = [[NSMutableDictionary alloc]init];
  [dictionary setObject:self.retrievedNamesMutableArray forKey:@"NamesArray"];
  [dictionary setObject:self.retrievedImagesArray forKey:@"ImagesArray"];
  */

   for (NSString *object in self.retrievedNamesMutableArray)
   {
    newContact = [NSEntityDescription insertNewObjectForEntityForName:@"AddressBook" inManagedObjectContext:context];
    [newContact setValue:@"GroupOne" forKey:@"groups"];
    [newContact setValue:object forKey:@"firstName"];

   }

   for (UIImage *img in self.retrievedImagesArray)
   {
     newContact = [NSEntityDescription insertNewObjectForEntityForName:@"AddressBook" inManagedObjectContext:context];
     [newContact setValue:img forKey:@"photo"];
     NSLog(@"Saved the photos of Array");
   }

  [context save:nil];
}

这就是我获取的方式。

-(void)fetchFromPhoneDatabase
{
   AddressBookAppDelegate *appDelegate =[[UIApplication sharedApplication]delegate];
   NSManagedObjectContext *context = [appDelegate managedObjectContext];
   NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"AddressBook" inManagedObjectContext:context];
   NSFetchRequest *request = [[NSFetchRequest alloc] init];
   [request setEntity:entityDesc];
   NSError *error;
   self.arrayForTable = [context executeFetchRequest:request error:&error];

   NSLog(@"contents from core data = %@",self.arrayForTable);

  [self.tableView reloadData];

 }

【问题讨论】:

    标签: ios core-data nsarray


    【解决方案1】:

    您的第一个循环创建包含名称但没有图像的对象,您的第二个循环创建包含图像但没有名称的不同对象。

    假设(根据您之前的问题)两个数组的大小相同,您应该 为每个名称/图像只创建一个对象:

    for (NSUInteger i = 0; i < [self.reterivedNamesMutableArray count]; i++) {
        NSString *object = self.reterivedNamesMutableArray[i];
        UIImage *img = self.reterivedImagesArray[i];
    
        newContact = [NSEntityDescription insertNewObjectForEntityForName:@"AddressBook" inManagedObjectContext:context];
        [newContact setValue:@"GroupOne" forKey:@"groups"];
        [newContact setValue:object forKey:@"firstName"];
        [newContact setValue:img forKey:@"photo"];
    }
    

    【讨论】:

    • 非常感谢。这照顾了一切......不过只有一个问题......我如何在表格视图单元格中设置图像?我这样做了....AddressBook *info = [self.arrayForTable objectAtIndex:indexPath.row]; cell.textLabel.text = info.firstName; cell.imageView.image = [UIImage imageWithData:info.photo];这会引发错误。
    • @Sushrut:Core Data 模型中的“照片”属性是如何定义的?它有哪些类型?
    • 它是可转换的,如果我将其设为二进制数据类型,则会引发 SIGABRT 错误。
    • @Sushrut:如果你保持它可变形,它是否有效,但分配cell.imageView.image = info.photo
    • 不。它也会抛出一个异常,说 ..unrecognized selector sent to instance 0x7d67be0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多