0

我有一个 iPhone 应用程序,它使用同步服务将其数据与桌面版本同步,一切正常,除了图像。

在 iphone 上,我将图像存储在 Documents Directory 中,并将文件路径存储在核心数据中。我设置了一个瞬态属性“图像”并选中了同步复选框并将其分配为身份属性。我添加了两种方法,

- (NSData *)image;
{
  NSLog(@"%@:%s entered", [self class], _cmd);
  if (image) return image;
  NSString *path = [self primitiveValueForKey:@"pathToFile"];
  if (!path) return nil;
  NSString *myPath = [NSHomeDirectory() stringByAppendingPathComponent:path];
  image = [[NSData alloc] initWithContentsOfFile:myPath];
  return image;
}

- (void)setImage:(NSData *)data
{
    NSLog(@"%@:%s entered", [self class], _cmd);
  NSString *destPath = [self primitiveValueForKey:@"pathToFile"];
  if (!destPath) {
  //Build the path we want the file to be at
  destPath = NSHomeDirectory();
  NSString  *guid = [[NSProcessInfo processInfo] globallyUniqueString];
  NSString  *fpath = [NSString stringWithFormat:@"Documents/%@", guid];
  destPath = [destPath stringByAppendingPathComponent:fpath];
  [self setValue:destPath forKey:@"pathToFile"];
  }
  [data writeToFile:destPath atomically:NO];
  [data retain];
  [image release];
  image = data;
}

- (void)willTurnIntoFault
{
  [image release], image = nil;
}

我以为,因为我在客户端描述文件中添加了图像属性,它只会将数据放入发送到 ZSync 守护进程的存储文件中,但我错了。并且图像数据不传输

我的问题是这可以做到吗?或同步图像数据的最佳方式是什么?

请给我指导,我已经搜索和搜索,但没有找到任何解决方案。

谢谢你

4

1 回答 1

0

Marcus Zarra 在 NSConference 上的演讲中有一个关于图像/二进制数据同步的问题。

基本上:如果您的图像低于 100k,请将其作为 NSData 直接放入对象中。

超过 100k 和低于 1M 使用存储数据并通过关系链接的附加实体。

1M 以上存储路径和磁盘上的数据,就像你正在做的那样。

只有前两种方法受益于通过 zsync 进行同步。如果您选择第三个,您将不得不通过其他方式将您的数据带到另一边。

于 2010-07-13T07:42:27.350 回答