2014-03-25 61 views
1

我試圖通過模擬器從Parse中提取PDF文件,並在我的應用程序上單擊按鈕時將其保存到我的桌面上。問題是無論我做什麼文件都不會顯示在桌面上或任何其他地方。我用這個方法對我的下載按鈕數據不會保存到桌面

-(void) Savefile { 
    NSFileManager *filemanager = [NSFileManager defaultManager]; 
    [self.downloadfile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) { 
     if (error) { 

     } 
     else if (data) { 
      [filemanager createFileAtPath:@"file:///Users/Danny/Desktop" contents:data attributes:nil]; 
      [data writeToFile:@"file:///Users/Danny/Desktop" atomically:NO ]; 
      NSLog(@"Downloading file..."); 
     } 
    }]; 

} 

downloadFile是存儲我的PDFfile的指標,我通過移動賽格瑞它PFFile屬性。它作爲本聲明:

@property (retain,nonatomic) PFFile * downloadfile; 

這這裏是SEGUE:

detailVC.downloadfile=[[PDFArray objectAtIndex:indexPath.row]objectForKey:@"PDFFile"]; 

不能得到它保存到桌面。

+1

忽略iOS應用程序不能訪問它的沙箱之外的文件中的重要問題,請注意, 'writeToFile:'和'createFi leAtPath:'方法採用文件路徑,而不是文件URL。擺脫領先的'file://'。擺脫對'createFileAtPath:contents:attributes:'的調用。你只需要調用'writeToFile:'。 – rmaddy

+0

@rmaddy所以我必須在沙箱內。有沒有一種方法可以在側面板上顯示允許說資源的文件?或者是不可能看到文件? – DannyK

回答

9

在您嘗試下載PDF文件中的iOS設備不存在,如果你想下載的路徑文件在你的設備,你可以嘗試這樣的: -

-(void) Savefile { 

    [self.downloadfile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) { 
     if (error) 
     { 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Wooopss!" message:@"Download failed. Try Again..." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [alert show]; 
     } 
     else if (data) 
     { 
      NSString *downloadFilePath = [NSString stringWithFormat:@"%@/Documents/PDFFile/hello_%@.pdf", NSHomeDirectory(),[self getCurrentDate]]; 

      if(![[NSFileManager defaultManager] fileExistsAtPath:downloadFilePath]) 
      { 
       NSLog(@"File don't exist at that path"); 
      } 
      else 
      { 
       NSError *error = nil; 
       [[NSFileManager defaultManager] removeItemAtPath:downloadFilePath error:&error]; 
      } 

      [[NSFileManager defaultManager] createFileAtPath:downloadFilePath contents:nil attributes:nil]; 

      NSLog(@"Downloading file..."); 

      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Downloading" message:@"File is being downloaded..." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [alert show]; 
     } 
    }]; 

} 
//Below method will return you current timestamp through which you can download new PDF with new name 

-(NSString *)getCurrentDate 
{ 

    NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
    [dateFormatter setDateFormat:@"MMddYYYYmmss"]; 

    NSString *date = [dateFormatter stringFromDate:[NSDate date]]; 

    return date; 
} 

希望這將幫助您編碼快樂:)

1

iOS設備沒有桌面。如果iOS 確實有有桌面,則應用程序將無法寫入,因爲iOS應用程序已進行了沙盒處理,因此無法在自己的數據存儲區外進行編寫。

即使在模擬器上運行,也不能寫入OSX桌面,因爲應用程序被沙盒模擬到Simulator文件存儲中。您可以將文件保存到您的應用程序沙箱,然後訪問從取景器模擬器存儲 -

Is there any way to see the file system on the iOS simulator?

+0

啊啊,謝謝你。我根本沒有意識到這一點。現在我必須弄清楚這個道路的事情,因爲我的圖書館沒有顯示 – DannyK

+0

Finder默認不顯示所有文件夾 - 在Finder的「Go」菜單中選擇「Go to finder」,然後輸入「Library」 – Paulw11

+0

好的謝謝,我想如果你進入Xcode組織者它會告訴你文件的路徑,我找到了一個更簡單的方法。所以當我寫這個文件的時候,我已經得到了我的靈魂能夠看到它的權利? – DannyK