我有一个iPhone应用程序,它使用同步服务将其数据与桌面版本同步,一切正常,但图像除外。
在iphone上,我将图像存储在Documents Directory中,并将文件路径存储在核心数据中。我设置了一个瞬态属性“image”并检查了同步复选框并将其指定为标识属性。我添加了两种方法,
- (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;
}
我认为,因为我在客户端描述文件中添加了image属性,它只是将数据放入发送到ZSync守护进程的存储文件中,但我错了。并且不传输图像数据
我的问题是这可以吗?或者同步图像数据的最佳方法是什么?
请给我指导,我已经搜索过,但没有找到任何解决方案。
谢谢
答案 0 :(得分:0)
Marcus Zarra's speech on the NSConference中有关于图像/二进制数据同步的问题。
基本上:如果图像低于100k,则将其直接放在对象内作为NSData。
高于100k且低于1M时,使用另一个存储数据的实体,并通过关系进行链接。
大约1M存储路径和磁盘上的数据,就像你正在做的那样。
通过zsync同步,只有前两种方法受益。如果你选择第三个,你必须通过其他方式将数据带到另一边。