有時(shí)我們會(huì)將圖片進(jìn)行存儲(chǔ),儲(chǔ)存到沙盒路徑下面,等我們用到的時(shí)候再去讀取。
讀取的時(shí)候一般有兩個(gè)方法
NSData *imageData = [NSData dataWithContentsOfFile:@"路徑"];
UIImage* image = [[UIImage alloc] initWithData:imageData];
還有一個(gè)
NSString *aPath3=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];
UIImage *imgFromUrl3=[[UIImage alloc]initWithContentsOfFile:aPath3];
但是有時(shí)候這兩個(gè)方法獲取不到對(duì)應(yīng)的圖片,網(wǎng)上有人說了好多的方案,但是并沒有解決問題。后來看了一個(gè)國(guó)外的帖子,解決了問題
當(dāng)我們存儲(chǔ)的時(shí)候,我們不光要存儲(chǔ)圖片也要將圖片的存在的沙盒路徑存儲(chǔ)下來,下次再用這個(gè)沙盒路徑讀取出來就可以了,好多人都這么去讀取,結(jié)果發(fā)現(xiàn)圖片獲取不到。
其實(shí)不是代碼有問題,而是路徑有問題,當(dāng)我們不重啟APP的時(shí)候沙盒路徑保持不變,但是當(dāng)我們重啟APP的時(shí)候,APP的沙盒了路徑已經(jīng)發(fā)生了變化,沙盒路徑有一段路徑是變化的每當(dāng)重啟一次APP就會(huì)發(fā)生變化
而我們存儲(chǔ)的路徑確實(shí)第一次的路徑,再次打開的時(shí)候,獲取到圖片當(dāng)然不可能,取到了可能才出現(xiàn)了問題。
那我們應(yīng)該怎么解決呢
既然沙盒路徑是變化的,那我們就不要存儲(chǔ)的變化的就可以了,我們只需要存儲(chǔ)的沙盒路徑后面的內(nèi)容就可以了,當(dāng)我們存儲(chǔ)圖片到沙盒路徑的時(shí)候,都會(huì)給圖片一個(gè)唯一的名字,去個(gè)例子:沙盒路徑 + 20180601090303.png,我們只要需要存儲(chǔ)20180601090303.png這部分就可以了。
但我們讀取的時(shí)候只需要,將沙盒路徑拼接上這存儲(chǔ)的唯一名字就可以獲取到了。雖然沙盒每次改變,但是我們的圖片位置還在那里,我們動(dòng)態(tài)獲取沙盒路徑加圖片唯一名字就一定是可以找到。