//寫入
- (void)writePlist :(NSString *)name :(NSString *)password
{
//取得檔案路徑
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//documentsDirectory為路徑,可健入以下程式碼以顯示其路徑資訊
//NSLog(@"%@", documentsDirectory);
//在Finder中顯示隐藏文件
//打開終端機輸入
//defaults write com.apple.finder AppleShowAllFiles -bool true
//KillAll Finder
//相反
//defaults write com.apple.finder AppleShowAllFiles -bool false
//KillAll Finder
//plist命名
NSString *filePath = [documentsDirectory stringByAppendingString:@"/data.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSMutableDictionary *plistDict;
//檢查檔案是否存在,return false則創建
if ([fileManager fileExistsAtPath: filePath])
{
plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
}else{
plistDict = [[NSMutableDictionary alloc] init];
}
//先查看是否已有obj在plist內
if ([plistDict objectForKey:name])
{
newUserLabel.text = [NSString stringWithFormat:@"%@ is already in list", name];
}
else
{
//向動態字典追加參數
[plistDict setObject:password forKey:name];
//把剛追加之參數寫入file
if ([plistDict writeToFile:filePath atomically: YES]) {
newUserLabel.text = [NSString stringWithFormat:@"User %@ create success!", name];
NSLog(@"writePlist success");
} else {
NSLog(@"writePlist fail");
}
}
//釋放記憶體
[plistDict release];
}
//讀取
- (void)readPlist :(NSString *)name :(NSString *)password
{
NSString *checkPassword;
//取得檔案路徑
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingString:@"/data.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSMutableDictionary *plistDict;
//檢查檔案是否存在
if ([fileManager fileExistsAtPath: filePath])
{
NSLog(@"File here.");
//存在的話把plist中的資料取出並寫入動態字典plistDict
plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
}else{
NSLog(@"File not here.");
plistDict = [[NSMutableDictionary alloc] init];
}
//使用objectForKey以關鍵字取得其value
checkPassword = [plistDict objectForKey:name];
//使用isEqualToString比對輸入
if ([checkPassword isEqualToString:password])
{
loginLabel.text = [NSString stringWithFormat:@"%@ login ok!", name];
}
else
{
loginLabel.text = [NSString stringWithFormat:@"登入名稱或密碼錯誤!"];
}
[plistDict release];
}
icenium包含以下三个内容:
graphite:安装在windows环境(无mac)下的开发环境。项目保存在云端。
mist:基于浏览器的开发环境
lon:iphone,ipad的测试工具,可在app store免费下载。无android版本
1、graphite无法输入中文,只能粘帖。HTML文件和JS文件都是。MIST WEB上可以输入中文。
2、http://app.icenium.com/Mist/获取的版本跟最新的版本控制的不一致,跟
graphite的也不一致。这样可能会造成版本冲突。今天重启电脑后发现是跟当前graphite一致而不是跟控制版本一致。
3、graphite无法识别到android设备(华为,三星,魅族都不行)。能识别到IPOD和ipad。今天可以识别到android设备了。
4、apple发布需要有apple ios development 的id,如果没有,则可通过下载icenium lon 的免费app,然后在mist web中run on device,选择ios,生成二维码,用ipad或iphone上的二维码扫描软件扫描后生成网址,在safari中打开,会自动下载下载后打开icenium lon。(但是失败了。icenium lon打开没内容)。
ipod无法下载,提示this apple id is onle avlid for use in the Chinese store。
icenium lon可以用三个手指头按在屏幕上,自动更新应用。ipad无效。
5、android的发布,在graphite如果run on device无法打开则发布不了。通过mist web的run on device可以打包成apk文件并下载,拷贝到android设备上安装。也可以通过扫描二维码的方式,在设备上下载安装。
6、调试方便。可以使用console函数打印。保存文件后,会直接反应在设备上。不需要重新手动发布。
7、使用的api是Cordova api。同phonegap一样。
8、提供了一套kendo UI。能兼容android和ios,使两个平台的UI看起来都很android和apple。而代码只需要写一份。但是这套UI是收费的,一年几百美金。
9、双引号字符串内不能使用单引号。必须使用\"转义
优点:
1、不需要安装android和ios的SDK开发环境。在win系统下即可完成android和ios
的mobile web开发。
2、调试部署容易。
3、基于jquery,jqueryMobile。
不足:
1、不支持中文
2、graphite无智能识别。且响应速度有点慢。
3、还不稳定,有时会出现上诉的问题有时又不会。
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
其中:
width - viewport的宽度
height - viewport的高度
initial-scale - 初始的缩放比例
minimum-scale - 允许用户缩放到的最小比例
maximum-scale - 允许用户缩放到的最大比例
user-scalable - 用户是否可以手动缩放
http://stackoverflow.com/questions/6389793/jquery-mobile-pages-super-large-in-safari-mobile