2011-10-13 9 views
0

メソッドtransmitDataでは、NSArrayファイルはnilになります。私のコードのどこに問題がありますか?私はファイルを保存します([file writeToURL:fileURL atomically:YES])、次にtransmitDataを呼び出しますが、ファイルを取得することはできません。NSFileManagerファイルを取得できません

#import "FileManagerService.h" 
#import "SynthesizeSingleton.h" 
@implementation FileManagerService 
SYNTHESIZE_SINGLETON_FOR_CLASS(FileManagerService); 

#define SAVEVOTER @"SV" 
#define SAVESCRIPT @"SS" 

- (NSURL *)applicationDocumentsDirectory 
{ 
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
} 

-(void)saveFile:(NSData*)file:(NSString*)dataType 
{ 
NSFileManager *manager = [NSFileManager defaultManager]; 
NSURL *fileURL; 
NSString *fileName; 

if (dataType == DATA_SAVE_VOTER) 
{ 
    fileName = [NSString stringWithFormat:@"%@01",SAVEVOTER]; 
    fileURL = [[self applicationDocumentsDirectory]URLByAppendingPathComponent:fileName]; 

    int fID = 0; 

    while ([manager fileExistsAtPath:[fileURL absoluteString]]) 
    { 
     fID++; 

     fileName = [NSString stringWithFormat:@"%@%d",SAVEVOTER,fID]; 
     fileURL = [[self applicationDocumentsDirectory]URLByAppendingPathComponent:fileName]; 
    } 

} 
else if (dataType == DATA_SAVE_SCRIPT) 
{ 
    fileName = [NSString stringWithFormat:@"%@01",SAVESCRIPT]; 
    fileURL = [[self applicationDocumentsDirectory]URLByAppendingPathComponent:fileName]; 

    int fID = 0; 

    while ([manager fileExistsAtPath:[fileURL absoluteString]]) 
    { 
     fID++; 

     fileName = [NSString stringWithFormat:@"%@%d",SAVESCRIPT,fID]; 
     fileURL = [[self applicationDocumentsDirectory]URLByAppendingPathComponent:fileName]; 
    } 

} 


[file writeToURL:fileURL atomically:YES]; 
} 


-(void)transmitData 
{ 
NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[self applicationDocumentsDirectory]absoluteString] error:NULL]; 

if (files == nil || [files count] <= 0) 
{ 
    NSLog(@"No files to transmit"); 
    return; 
} 

for (id file in files) 
{ 
    NSData * dt = file; 
    NSString *str = [[NSString alloc]initWithData:dt encoding:NSUTF8StringEncoding]; 

    NSLog(@"DataContents: %@",str); 
} 
} 

@end 

EDIT:より多くのテスト時 :

fileName = @"testfile"; 
    fileURL = [[self applicationDocumentsDirectory]URLByAppendingPathComponent:fileName]; 

     NSLog(@"URL1: %@",[fileURL absoluteString]); 

私のログがNullをアップ来ています。だから私は明らかにnullファイルの場所で保存しているので、私はファイルを取り出すことができません....なぜこれが起こっているのですか? FIXED

だから私は、なぜわかりませんが、[ファイルwriteToURL:fileURLはアトミック:YES]は動作しませんし、[[NSFileManager defaultManager] createFileAtPath:fileURL 内容: ファイル属性:nilを]; は機能しません。

答えて

0

使用

- (NSURL *)applicationDocumentsDirectory 
{ 
    NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentPath = [searchPaths objectAtIndex:0]; 

    return [NSURL fileURLWithPath:documentPath]; 
} 

NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[self applicationDocumentsDirectory]path] error:NULL]; 
+0

私の悪い、absoluteStringを使用しないでください。私の答えを編集しました。 – Akshay

+0

私が提案したコードを使用していますか? – Akshay

+0

simではなくデバイスでテストすれば、有効なURLが得られるように見えますが、それでもファイルは取得できません。 – spentak