我有這樣的代碼時,我建立調試我的手機和模擬器(我的手機上使用模擬器上的iOS 4.0和iOS 5.0)上工作。但是,每當我做了一個特設的構建和安裝我的手機上,它充當如果將圖像保存,但顯示一個空白區裏的形象應該是。所以我不認爲這是一個權限問題,因爲我首先檢查是否有圖像文件要顯示,如果沒有,我顯示一個默認圖片。所以,如果它是一個權限問題,就無法保存文件名代碼覺得有可顯示文件,並會顯示默認。這裏是我當前的代碼:圖像保存到iPhone應用程序
+(void)downloadImage:(id)image_path {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
NSString *urlString = [NSString stringWithFormat: @"http://www.vegashipster.com/%@",image_path];
NSData *imageData = [[NSData alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = [paths objectAtIndex:0];
NSString *myFilePath = [libraryDirectory stringByAppendingPathComponent:image_path];
NSString *hotelsPath = [libraryDirectory stringByAppendingPathComponent:@"images/hotels"];
NSLog(@"saving jpg %@",myFilePath);
UIImage *image = [[UIImage alloc] initWithData:imageData];//1.0f = 100% quality
BOOL isDir;
NSError *error;
if (!([[NSFileManager defaultManager] fileExistsAtPath:hotelsPath isDirectory:&isDir] && isDir)) {
if (![[NSFileManager defaultManager] createDirectoryAtPath:hotelsPath withIntermediateDirectories:true attributes:nil error:&error]){
NSLog(@"%@",error);
}
}
NSData *dataImage = [NSData dataWithData:UIImageJPEGRepresentation(image, 1.0f)];
if (![[NSFileManager defaultManager] createFileAtPath:myFilePath contents:dataImage attributes:nil]){
NSLog(@"Not Saved!!!!");
}
// [dataImage writeToFile:myFilePath atomically:YES];
NSLog(@"saving image done");
NSString *alertString = [NSString stringWithFormat: @"urlString: %@ || hotelsPath %@",urlString,hotelsPath];
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Alert" message:alertString delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil] autorelease];
[alert show];
[pool drain];
}
的UIAlertView中只是在那裏,這樣我可以看到,在特設的身材,發生了什麼事。我已經把if語句儲蓄,以及在該地區的圖像(在那裏說:NSLog(@"Not Saved!!!!");
)如果hotelsPath變量是不是一個已經存在的目錄捕獲錯誤(在那裏說:NSLog(@"%@",error);
)之一。 UIAlertView沒有出現在這兩個區域。
再者,我直接從X-代碼構建到我的手機進行調試,但是當我臨時沒有存檔,並創建一個IPA文件直接放到我的電話這個代碼工作。我對iPhone開發非常陌生,並且不瞭解構建中的差異以瞭解它甚至可能是什麼。
編輯
下面是如果該文件存在的代碼檢查:
NSString *image_path = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 5)];
if ([image_path isEqualToString:@""]) {
hotel_image = [UIImage imageNamed:@"hdrHotels.jpg"];
}else{
NSFileManager* fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = [paths objectAtIndex:0];
NSString *myFilePath = [libraryDirectory stringByAppendingPathComponent:image_path];
BOOL fileExists = [fileManager fileExistsAtPath:myFilePath];
if (fileExists){
hotel_image = [UIImage imageNamed:image_path];
}else{
[NSThread detachNewThreadSelector:@selector(downloadImage:) toTarget:[HotelsDetailsViewController class] withObject:image_path];
hotel_image = [UIImage imageNamed:@"hdrHotels.jpg"];
}
}
我檢查,看看是否該數據庫具有圖像文件名,然後檢查圖像存在,並在不顯示默認圖像的情況下下載它。
更新
我添加了一些代碼來檢查文件路徑的文件大小。在保存文件之前,它是0Kb。保存文件後,我檢查的圖像是96,077Kb。這是在我的手機上。在工作正常的模擬器上,文件大小顯示相同的圖像爲97,696Kb。難道圖像只是不完全保存?或者iPhone上是否有壓縮類型?
文件路徑,例如
下面是這個應用程序將檢查的路徑:
/var/mobile/Applications/APP-NUMB3R-1D/Library/images/hotels/96.jpg
再次,在第一時間,酒店看了一下,它顯示了默認的圖像,因爲找不到此文件路徑。下一次,它顯示一個空白圖像,表明找到了文件路徑。另外,當我檢查文件路徑的內容大小時,第一次爲零。下一次,它是100Kb左右。所以肯定會寫些東西。最後,當我在調試模式下在我的實際手機上運行這個相同的代碼時,它可以工作並顯示圖像。當我使用專門構建運行它時,它不顯示圖像。
編輯
有可能是另一個問題。我剛剛發現,在更改我的代碼後,圖像不會在用我的iPhone下載調試版本後顯示出來。我必須在所有需要再次修復的測試中改變其他內容。之前在另一部手機上的調試版本仍在正常工作,所以至少我知道我並沒有失去理智。 ;)
我發現這是因爲我改變了我的文件路徑的變量名稱。改變了他們,並再次運作。
請顯示您用於有條件檢查是否有圖像顯示的代碼。 – 2012-01-02 15:10:58
Xcode只是一個集成編輯器 - 無關 – vikingosegundo 2012-01-02 15:15:38
@AlexNichol我已經添加了代碼。 – James 2012-01-02 15:30:25