2013-12-22 47 views
0

當應用程序委託方法處理打開的文件(來自另一個應用程序)在我的應用程序中被調用時,它傳遞給我的應用程序的URL爲nil ...或者至少這就是NSFileManager告訴我,因爲該文件確實存在於它指定的位置。在應用程序openURL中傳遞的URL:不存在

爲什麼NSFileManager告訴我應用程序文檔收件箱中文件的文件URL不存在?這裏是我是如何處理的網址:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
    if (![[NSFileManager defaultManager] fileExistsAtPath:[url absoluteString]]) { 
     NSLog(@"File does not exist at path: %@", [url absoluteString]); 
    } else { 
     ... 
    } 
} 

我一直在試圖找出這了一會兒,但我想不出任何理由,爲什麼這裏的url參數將被登記爲不存在的。這可能很簡單。也許absoluteString的事情正在絆倒NSFileManager?

任何想法?我已經搜索和搜索,但什麼都沒有發現 - 並且什麼也沒有想到。

+0

嘗試在使用NSFileManager之前檢查url [url isFileURL]。 – stosha

+0

放入一個斷點,並檢查網址 –

+0

@stosha我檢查文件'isFileURL'是否返回YES。 –

回答

1

到轉換(文件)的正確方法的URL路徑是path,不 absoluteString

if (![[NSFileManager defaultManager] fileExistsAtPath:[url path]]) { 
    ... 

從文檔-[NSURL path]

如果此URL對象包含一個文件URL(由isFileURL確定), 該方法的返回值適合輸入到 NSFileManager或NSPathUtilities的方法中。

absoluteString另一方面,返回一個URL字符串,如「file:/// path/to/file」。

0

您應該檢查之前使用的NSFileManager的網址:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
    if (url && [url isFileURL]) 
    { 
     if (![[NSFileManager defaultManager] fileExistsAtPath:[url absoluteString]]) { 
     NSLog(@"File does not exist at path: %@", [url absoluteString]); 
     } 
     else 
     { 
      ... 
     } 
    } 
} 
1

這裏的第一個錯誤是您使用的是-[NSURL absoluteString]。您需要改爲path

但是,另一個問題甚至可能是測試文件的存在。這很少用,你應該試着對文件執行一些操作,處理髮生的任何故障。

如果你真的必須測試它的存在,使用更現代的-[NSURL checkResourceIsReachableAndReturnError:]來代替。

+0

最後一點是很好的瞭解!任何想法,當蘋果添加該API?它在7.0? –

+0

正如文檔中明確指出的那樣:「可用於iOS 5.0及更高版本(符號存在於iOS 4中,但不執行任何操作)」 –

相關問題