0

我可能在这里看不到任何东西,这就是我寻求帮助的原因:) 这是我有一个 NSMutable 满足 NSCoding 协议的项目数组的交易,但 NSKeyedArchiver 总是无法归档它......这是我的对象实现:

@implementation YTVideo
@synthesize URL,thumb,titulo;

#pragma mark NSCoding
#define kTituloKey          @"titulo"
#define kURLKey     @"URL"
#define kThumbKey       @"thumb"

-(id)initWithData:(NSString *)ktitle :(UIImage *)kThumb :(NSURL *)kURL{
self.titulo = ktitle;
self.thumb = kThumb;
self.URL = kURL;

return self;
}

- (void) encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:titulo forKey:kTituloKey];
[encoder encodeObject:URL forKey:kURLKey];
NSData *thumbData = UIImagePNGRepresentation(thumb);
[encoder encodeObject:thumbData forKey:kThumbKey];
}

- (id)initWithCoder:(NSCoder *)decoder {
NSString* ktitulo = [decoder decodeObjectForKey:kTituloKey];
NSURL* kURL = [decoder decodeObjectForKey:kURLKey];
NSData* kThumbdata = [decoder decodeObjectForKey:kThumbKey];
UIImage* kThumb=[UIImage imageWithData:kThumbdata];
return [self initWithData:ktitulo:kThumb:kURL];
}

@end

在程序执行期间,我有一个名为 videosArray 的对象的 NSMutable 数组。

然后,最终,我尝试:

NSString* path =[NSHomeDirectory() stringByAppendingPathComponent:@"teste.wrapit"];
NSLog(@"PATH =%@",path);
bool teste = [NSKeyedArchiver archiveRootObject:videosArray toFile:path];
NSLog(@"aramzenamento:%@",teste ? @"sucesso!" :@"Nope");
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:path];
NSLog(@"Arquivo armazenado existe?%@",fileExists ?@"Sim":@"Nao");

而且我的布尔检查总是失败......我完全错误的任何想法?谢谢!!

4

1 回答 1

5

您遇到的问题与NSKeyedArchiver. 从外观上看,您正在尝试将对象存档在沙箱的根级别(由 返回的目录NSHomeDirectory())。尝试将第二个代码块的第一行替换为

NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
path = [path stringByAppendingPathComponent:@"teste.wrapit"];

获取Documents文件夹路径的另一种(可能更简洁)方法是使用 C 函数NSSearchPathForDirectoriesInDomains,它返回与第一个参数匹配的路径数组:

NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"teste.wrapit"];

值得指出的是,在 iOS 上,当您使用内置常量(如)作为第一个参数时,该函数NSSearchPathForDirectoriesInDomain保证返回单个元素,因此您可以安全地在数组上使用。NSArrayNSDocumentDirectoryobjectAtIndex:0

于 2010-09-23T18:45:47.450 回答