Основные данные изображений с рабочего стола на iphone - PullRequest
10 голосов
/ 16 февраля 2010

Я создал простой инструмент ввода данных Mac, который я использую в приложении для iPhone. Я недавно добавил миниатюру, которую добавил через Image Well, используя простые привязки. Это преобразуемый тип данных, который, кажется, работает нормально.

Приложение iPhone, однако, не будет отображать изображения. Атрибут не нулевой, но я не могу отобразить изображение. Следующее для cellForRowAtIndexPath

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

NSManagedObject *entity = nil;
if ([self.searchDisplayController isActive])
    entity = [[self filteredListContent] objectAtIndex:[indexPath row]];
else
    entity = [fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = [entity valueForKey:@"name"];
//cell.imageview.image = [UIImage imageNamed:@"ImageB.jpeg"]; //works fine
cell.imageView.image = [entity valueForKey:@"thumbnail"];//no error, but no file

return cell;

Я думаю, что проблема либо в трансформируемом (я использую NSKeyedUnarchiveFromData по умолчанию), либо в том, как я вызываю миниатюру. Я новичок, поэтому любая помощь будет принята с благодарностью.

1 Ответ

15 голосов
/ 16 февраля 2010

Похоже, вы сохраняете изображение в виде NSImage на рабочем столе, и этот объект не существует на iPhone. Ваше настольное приложение должно хранить изображение в портативном виде, в формате PNG или JPG и т. Д. Затем вы сможете загрузить его обратно в приложение для iPhone как UIImage.

Обновление повторно трансформируется

Похоже, вы все еще передаете NSImage атрибуту, и он думает, что вы обрабатываете его данные. Сначала необходимо преобразовать его в «стандартный» формат, например:

NSBitmapImageRep *bits = [[myImage representations] objectAtIndex: 0];

NSData *data = [bits representationUsingType:NSPNGFileType properties:nil];
[myManagedObject setImage:data];

Я рекомендую написать специальные средства доступа для этого, например:

#ifdef IPHONEOS_DEPLOYMENT_TARGET

- (void)setImage:(UIImage*)image
{
  [self willChangeValueForKey:@"image"];

  NSData *data = UIImagePNGRepresentation(image);
  [myManagedObject setImage:data];
  [self setPrimitiveValue:data forKey:@"image"];
  [self didChangeValueForKey:@"image"];
}

- (UIImage*)image
{
  [self willAccessValueForKey:@"image"];
  UIImage *image = [UIImage imageWithData:[self primitiveValueForKey:@"image"];
  [self didAccessValueForKey:@"image"];
  return image;
}

#else

- (void)setImage:(NSImage*)image
{
  [self willChangeValueForKey:@"image"];
  NSBitmapImageRep *bits = [[image representations] objectAtIndex: 0];

  NSData *data = [bits representationUsingType:NSPNGFileType properties:nil];
  [myManagedObject setImage:data];
  [self setPrimitiveValue:data forKey:@"image"];
  [self didChangeValueForKey:@"image"];
}

- (NSImage*)image
{
  [self willAccessValueForKey:@"image"];
  NSImage *image = [[NSImage alloc] initWithData:[self primitiveValueForKey:@"image"]];
  [self didAccessValueForKey:@"image"];
  return [image autorelease];
}

#endif

Это даст вам условную компиляцию и сохранит данные в виде NSData (в формате PNG), которые можно получить на любом устройстве.

...