ios沙盒存儲圖片
A. 在ios沙盒機制下下面哪個文件夾是用來存放數據的
IOS沙盒機制(SandBox)種安全體系規定應用程序能該應用創建文件夾內讀取文件訪問其內容所非代碼文件都保存比圖片、聲音、屬性列表文本文件等
1.每應用程序都自沙盒內
2.能隨意跨越自沙盒訪問別應用程序沙盒內容
3.應用程序向外請求或接收數據都需要經許可權認證
查看模擬器沙盒文件夾Mac電腦存儲位置首先文件夾隱藏所要先些文件顯示打命令行:
顯示Mac隱藏文件命令:defaults write com.apple.finder AppleShowAllFiles -bool true
隱藏Mac隱藏文件命令:defaults write com.apple.finder AppleShowAllFiles -bool false
重新啟Finder點擊屏幕左角蘋標志——強制退——選擇Finder點擊重新啟候重新打Finder看隱藏文件
種比較簡單辦直接點擊Finder圖標右鍵——前往文件夾——輸入/Users/your username/Library/Application Support/iPhone Simulator/ ,確認your username本機用戶名
B. ios 存儲沙盒偏好設置和其他的區別
Xcode6沙盒路徑與Xcode5沙盒路徑對比:
(1)Xcode5中沙盒的路徑為:/Users/用戶名/Library/Application
Support/iPhone Simulator/7.1-64/Applications/對應應用程序文件夾
通過以上可以看出通過NSUserDefault創建的plist文件真正存放的位置發生了變化,成了在模擬器的資料庫文件夾下的Preferences文件夾下,也就是說當我們在刪除模擬器中的應用程序後,真正的plist文件是不會被刪除的,如果需要清除偏好設置文件需要手動到對應的目錄下刪除!當然這只是在模擬器的情況下,真機上應該是不會出現這種問題的,具體情況可以嘗試下。
C. iOS 怎麼從沙盒中載入 一個 zip 包和一個資源文件夾
這肯定的啊,因為用[UIImage imageNamed:question.icon]是直接從當前的項目中讀取文件,可以實現; 而NSString *path = [[NSBundle mainBundle] pathForResource:question.icon];是從沙盒路徑中讀取文件,只用question.icon是不夠的,應該加上當前的沙盒路徑,如果你的沙盒路徑中還有一個存放圖片的文件夾的話,還要加上這個文件夾的名字,question.icon應該改為: 沙盒路徑/文件夾名/question.icon 具體實現是這樣的: //程序包的根目錄(沙盒路徑) NSString *resourcePath = [[NSBundle mainBundle] resourcePath]; //完整的圖片路徑,如果圖片是放在文件夾中的話,還要在中間加上文件夾的路徑 NSString *imagepath = [resourcePath :@」question.icon「]; //可以列印路徑看看是什麼情況 NSlog(@「%@」,imagePath); UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
D. ios的應用沙箱運行是怎麼一回事
1、IOS沙盒機制
IOS應用程序只能在本應用程序中創建的文件系統中讀取文件,不可以去其它地方訪問,此區域被成為沙盒,所有的非代碼文件都要保存在此,例如圖像,圖標,聲音,映像,屬性列表,文本文件等。
1.1、每個應用程序都有自己的存儲空間
1.2、應用程序不能翻過自己的圍牆去訪問別的存儲空間的內容
1.3、應用程序請求的數據都要通過許可權檢測,假如不符合條件的話,不會被放行。
通過這張圖只能從表層上理解sandbox是一種安全體系,應用程序的所有操作都要通過這個體系來執行,其中核心內容是:sandbox對應用程序執行各種操作的許可權限制。
2、打開模擬器沙盒目錄
下面看看模擬器的沙盒文件夾在mac電腦上的什麼位置。
文件都在個人用戶名文件夾下的一個隱藏文件夾里,中文叫資源庫,英文名是Library。
下面介紹一種簡單方法前往該文件夾:在Finder上點->前往->前往文件夾
進入模擬器後,裡面就包含了各個應用程序的沙盒。
進入一個應用程序,如下圖,就是一個沙箱了。
下面介紹一下沙箱的目錄結構:
默認情況下,每個沙盒含有3個文件夾:Documents, Library 和 tmp和一個應用程序文件(也是一個文件)。因為應用的沙盒機制,應用只能在幾個目錄下讀寫文件
Documents:蘋果建議將程序中建立的或在程序中瀏覽到的文件數據保存在該目錄下,iTunes備份和恢復的時候會包括此目錄
Library:存儲程序的默認設置或其它狀態信息;
Library/Caches:存放緩存文件,iTunes不會備份此目錄,此目錄下文件不會在應用退出刪除
tmp:提供一個即時創建臨時文件的地方。
iTunes在與iPhone同步時,備份所有的Documents和Library文件。
iPhone在重啟時,會丟棄所有的tmp文件。
注意:這里很容易和bundle混淆在一起,下面根據自己的一點理解說明二者的區別:
bundle :生成 iOS 應用程序時,Xcode 將它捆綁成一個包。捆綁包 (bundle) 是文件系統中的一個目錄,它將相關資源成組在一個地方。一個 iOS 應用程序捆綁包中,含有其可執行文件和支持資源文件(如應用程序圖標、圖像文件和已本地化的內容)。
A bundle(包裹、捆、束) is a directory with a standardizedhierarchical structure that holds executable code and the resources used by that code.
所以可以將整個應用程序其實就可以看做一個bundle。
沙箱的概念和bundle沒直接關系,沙箱只是說明程序資源與外界隔離
下面通過一個簡單的例子說明一下bundle和sandbox。
//新建的plist文件是在應用程序中的,可以通過bundle存取到該文件
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"MyPlist" ofType:@"plist"];
NSMutableArray *array = [NSMutableArray arrayWithContentsOfFile:plistPath];
//向數組中新添加一個項目
[array addObject:@"3"];
//重新寫回plist文件中
BOOL value = [array writeToFile:plistPath atomically:YES];
if (value) {
NSMutableArray *newArray = [NSMutableArray arrayWithContentsOfFile:plistPath];
NSLog(@"new array = %@",newArray);
}
/* 輸出:
new array = (
0,
1,
2,
3
)
*/
//獲取沙箱中document的path
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *newPath = [documentsDirectory :@"data.plist"];
//將數組寫入到沙箱的document中的data.plist文件中
[array writeToFile:newPath atomically:YES];
NSMutableArray *arr = [[NSMutableArray alloc] initWithContentsOfFile:newPath];
NSLog(@"array in data.plist = %@",arr);
/* 輸出:
array in data.plist = (
0,
1,
2,
3
)
*/
說明:我們首先在項目中新建一個plist文件(root項的類型為數組),添加了3個元素。因為新建的plist文件是在應用程序中的,我們可以通過bundle獲取到這個plist文件,讀取出這個數組,添加一個數據元素後,重新寫回plist文件中。接著我們獲取沙箱document的path,然後將這個文件寫入到沙箱中的data.plist文件中(如果不存在,會自動新建一個的),然後再從data.plist讀取出這個數組。
關於新建的MyPlist.plist文件,我們寫迴文件的數組中添加了一項新的元素,但是我們在xcode中查看這個MyPlist.plist文件時,發現並沒有顯示出新增的數組元素,但是我們到沙箱中查看就可以看到了,這個估計是xoode本身的問題。
關於document中data.plist文件查看我們也可以到沙箱中進行查看。如下圖:
3、獲取沙盒目錄:
//1、獲取程序的Home目錄
NSString *homeDirectory = NSHomeDirectory();
NSLog(@"path:%@", homeDirectory);
//path:/Users/ios/Library/Application Support/iPhone Simulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671
//2、獲取document目錄
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);
//path:/Users/ios/Library/Application Support/iPhone Simulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671/Documents
//3、獲取Cache目錄
NSArray *paths = (NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);
//path:/Users/ios/Library/Application Support/iPhone Simulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671/Library/Caches
//4、獲取Library目錄
NSArray *paths = (NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);
//path:/Users/ios/Library/Application Support/iPhone Simulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671/Library
//5、獲取tmp目錄
NSString *tmpDir = NSTemporaryDirectory();
NSLog(@"path:%@", tmpDir);
//path:/Users/ios/Library/Application Support/iPhone Simulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671/tmp/
4、文件操作之NSFileManager
4.1 、在document中創建一個文件目錄
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"documentsDirectory%@",documentsDirectory);
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *testDirectory = [documentsDirectory :@"test"];
// 創建目錄
[fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];
4.2 、 在test目錄下創建文件
創建文件怎麼辦呢?接著上面的代碼 testPath 要用拼接上你要生成的文件名,比如test11.txt。這樣才能在test目錄下寫入文件。
testDirectory是上面代碼生成的路徑哦,不要忘了。我往test文件夾里寫入三個文件,test11.txt ,test22.txt,text.33.txt。內容都是寫入內容,write String。
實現代碼如下:
NSString *testPath1 = [testDirectory :@"test1.txt"];
NSString *testPath2 = [testDirectory :@"test2.txt"];
NSString *testPath3 = [testDirectory :@"test3.txt"];
NSString *string = @"寫入內容,write String";
[fileManager createFileAtPath:testPath1 contents:[string dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
[fileManager createFileAtPath:testPath2 contents:[string dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
[fileManager createFileAtPath:testPath3 contents:[string dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
4.3獲取目錄列里所有文件名
兩種方法獲取:subpathsOfDirectoryAtPath 和 subpathsAtPath
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"documentsDirectory%@",documentsDirectory);
NSFileManager *fileManage = [NSFileManager defaultManager];
NSString *myDirectory = [documentsDirectory :@"test"];
//方法一
NSArray *file = [fileManage subpathsOfDirectoryAtPath: myDirectory error:nil];
NSLog(@"%@",file);
//方法二
NSArray *files = [fileManage subpathsAtPath: myDirectory ];
NSLog(@"%@",files);
獲取剛才test目錄下的所以文件名:
兩種方法都是輸出
(
"test1.txt",
"test2.txt",
"test3.txt"
)
4.4 、fileManager使用操作當前目錄
//創建文件管理器
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//更改到待操作的目錄下
[fileManager changeCurrentDirectoryPath:[documentsDirectory stringByExpandingTildeInPath]];
//創建文件fileName文件名稱,contents文件的內容,如果開始沒有內容可以設置為nil,attributes文件的屬性,初始為nil
NSString * fileName = @"testFileNSFileManager.txt";
NSArray *array = [[NSArray alloc] initWithObjects:@"hello world",@"hello world1", @"hello world2",nil];
//下面是將數組類型轉換為NSData類型
NSMutableData *data = [[NSMutableData alloc] init];
for (int i = 0; i < [array count]; ++i ){
NSString *str = [array objectAtIndex:i];
NSData *temp = [str dataUsingEncoding:NSUTF8StringEncoding];
[data appendData:temp];
}
//注意contents參數的類型是NSData類型
[fileManager createFileAtPath:fileName contents:data attributes:nil];
4.5 刪除文件
接著上面的代碼就可以將剛新建的 testFileNSFileManager.txt文件刪除!
[fileManager removeItemAtPath:fileName error:nil];
4.6 混合數據的讀寫 請參看原文最後面的內容。
E. ios開發 plist可以保存圖片么
可以保存圖片地址,也可以將圖片保存為data,但是不建議後者,因為這回導致plist文件過大,從而載入緩慢,影響其他數據的展示,如果保存圖片地址的話,就可以開一個單獨的線程載入圖片,同事又不影響其他數據展示。。。又需要的話歡迎追問。。。
F. ios沙盒機制下 哪個文件存放數據
IOS 從Resource文件夾下Copy文件到沙盒
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.title = @"拷貝文件到Sandbox";
//文件類型
NSString * docPath = [[NSBundle mainBundle] pathForResource:@"save1" ofType:@"dat"];
// 沙盒Documents目錄
// NSString * appDir = [(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 沙盒Library目錄
NSString * appDir = [(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
//appLib Library/Caches目錄
NSString *appLib = [appDir stringByAppendingString:@"/Caches"];
BOOL filesPresent = [self MissingFile:docPath toPath:appLib];
if (filesPresent) {
NSLog(@"OK");
}
else
{
NSLog(@"NO");
}
// 創建文件夾
NSString *createDir = [NSHomeDirectory() stringByAppendingString:@"/test"];
[self createFolder:createDir];
// 把文件拷貝到Test目錄
BOOL filesPresent1 = [self MissingFile:docPath toPath:createDir];
if (filesPresent1) {
NSLog(@"OK");
}
else
{
NSLog(@"NO");
}
}
/**
* @brief 把Resource文件夾下的save1.dat拷貝到沙盒
*
* @param sourcePath Resource文件路徑
* @param toPath 把文件拷貝到XXX文件夾
*
* @return BOOL
*/
- (BOOL)MissingFile:(NSString *)sourcePath toPath:(NSString *)toPath
{
BOOL retVal = YES; // If the file already exists, we'll return success…
NSString * finalLocation = [toPath :[sourcePath lastPathComponent]];
if (![[NSFileManager defaultManager] fileExistsAtPath:finalLocation])
{
retVal = [[NSFileManager defaultManager] ItemAtPath:sourcePath toPath:finalLocation error:NULL];
}
return retVal;
}
/**
* @brief 創建文件夾
*
* @param createDir 創建文件夾路徑
*/
- (void)createFolder:(NSString *)createDir
{
BOOL isDir = NO;
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL existed = [fileManager fileExistsAtPath:createDir isDirectory:&isDir];
if ( !(isDir == YES && existed == YES) )
{
[fileManager createDirectoryAtPath:createDir withIntermediateDirectories:YES attributes:nil error:nil];
}
}
G. 在ios沙盒機制下,哪個文件用來存放數據
何查看、管理ios模擬器文件 ios模擬器路徑-打沙盒路徑 1、模擬器沙盒目錄 文件都用戶名文件夾隱藏文件夾文叫資源庫目錄其實Library 1.1 1、設置顯示隱藏文件Finder直接打
H. ios什麼時候用沙盒和什麼時候用資料庫
IOS中的沙盒機制(SandBox)是一種安全體系,它規定了應用程序只能在為該應用創建的文件夾內讀取文件,不可以訪問其他地方的內容。所有的非代碼文件都保存在這個地方,比如圖片、聲音、屬性列表和文本文件等。
1.每個應用程序都在自己的沙盒內
2.不能隨意跨越自己的沙盒去訪問別的應用程序沙盒的內容
3.應用程序向外請求或接收數據都需要經過許可權認證
查看模擬器的沙盒文件夾在Mac電腦上的存儲位置,首先,這個文件夾是被隱藏的,所以要先將這些文件顯示出來,打開命令行:
顯示Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true
隱藏Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false
然後重新啟動Finder,點擊屏幕左上角蘋果標志——強制退出——選擇Finder然後點擊重新啟動,這個時候在重新打開Finder就可以看到被隱藏的文件了。
還有一種比較簡單的辦法就是直接點擊Finder圖標右鍵——前往文件夾——輸入/Users/your username/Library/Application Support/iPhone Simulator/ ,然後確認就可以了。your username是你本機的用戶名