0

私はおそらくここで何かを見ていないので、助けを求めているのです :) NSCoding プロトコルを満たすアイテムの NSMutable 配列を持っている取引がありますが、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()。2 番目のコード ブロックの最初の行を次のように置き換えてみてください。

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

フォルダーのパスを取得するもう 1 つの (おそらくよりクリーンな) 方法Documentsは、C 関数を使用することです。この関数NSSearchPathForDirectoriesInDomainsは、最初の引数に一致するパスの配列を返します。

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

iOS では、最初の引数に組み込み定数 ( など) を使用すると、関数NSSearchPathForDirectoriesInDomainは 1 つの要素を持つ を返すことが保証されているため、配列で安全に使用できることに注意してください。NSArrayNSDocumentDirectoryobjectAtIndex:0

于 2010-09-23T18:45:47.450 に答える