10

iPhone アプリケーションで使用するシンプルな Mac データ入力ツールを作成しました。私は最近、単純なバインディングを使用して Image Well 経由で追加したサムネイルを追加しました。正常に動作するように見える変換可能なデータ型です。

ただし、iPhone アプリケーションは画像を表示しません。属性は null ではありませんが、画像を表示できません。以下は 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 を使用しています)、またはサムネイルの呼び出し方法にあると考えています。私は初心者なので、どんな助けでも大歓迎です。

4

1 に答える 1

15

デスクトップにNSImageとして画像を保存していて、そのオブジェクトがiPhoneに存在しないようです。デスクトップアプリは、画像をポータブルなもの、PNGまたはJPGなどに保存する必要があります。そうすると、画像をUIImageとしてiPhoneアプリケーションにロードして戻すことができます。

再変換可能な更新

まだ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形式)としてデータが保存されます。

于 2010-02-16T17:31:33.373 に答える