界面的设计就是简单的在storyboard中拖入控件然后在头文件.h中声明功能然后连接即可。
为了存下用户的数据,我参考了一个扫雷小游戏的源码,选择利用fmdb来存储。
一、先安装cocoapods,可参考这个http://www.jianshu.com/p/9e4e36ba8574。到导入第三方库的时候导入fmdb即可。
并在你的项目中的targets中build phases 中的link binary with libraries中添入libsqlite3.dylib库。
以下我是先参考了一些博客的代码,(为了验证找生成的数据库文件找了很久...在这个/Users/你的用户名/Library(需要先设置显示隐藏文件)/Developer/CoreSimulator/Devices/路径下然后查找文件即可,用火狐的SQLite manage看了看生成的数据),成功在控制台看到自己的用户信息之后,经过学姐的提示,用数组来存储用户信息,我选择的是简单的用lable text来显示用户信息,用降序排列,并设置了排行榜按钮,设计了按下之后再显示label的内容的功能(利用alpha属性)。
platform :ios,'7.0'
target '24' do
pod 'FMDB'
end
.h中:
#import "FMDB.h"
#define DBNAME @"personinfo.sqlite"
#define NAME @"name"
#define SCORE @"score"
#define TIME @"time"
#define TABLENAME @"PERSONINFO"
.m中:
-(IBAction)buttonsave{
NSString *sqlCreateTable = @"CREATE TABLE IF NOT EXISTS PERSONINFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, score INTEGER, time INTEGER)";
[self execSql:sqlCreateTable];
NSString *sql1 = [NSString stringWithFormat:
@"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%d', '%d')",
TABLENAME, NAME, SCORE, TIME,_NameLabel.text,score, lable18];
[self execSql:sql1];//插入新输入的用户信息
NSString *sqlQuery = @"SELECT * FROM PERSONINFO ORDER BY score DESC";
sqlite3_stmt * statement;
NSMutableArray *dataArr = [[NSMutableArray alloc]init];
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
char *name = (char*)sqlite3_column_text(statement, 1);
NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
int scoree = sqlite3_column_int(statement, 2);
int time = sqlite3_column_int(statement, 3);
NSString *stuData = [NSString stringWithFormat:@"name:%@ score:%d time:%d",nsNameStr,scoree, time];
[dataArr addObject:stuData];
}
}
sqlite3_close(db);
lableone.text = [dataArr objectAtIndex: 0];
labletwo.text = [dataArr objectAtIndex: 1];
lablethree.text = [dataArr objectAtIndex: 2];
}//保存插入并重新排序
-(void)execSql:(NSString *)sql
{
char *err;
if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
sqlite3_close(db);
NSLog(@"数据库操作数据失败!");
}
}
- (void)database1{
//数据库
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documents = [paths objectAtIndex:0];
NSString *database_path = [documents stringByAppendingPathComponent:DBNAME];
if (sqlite3_open([database_path UTF8String], &db) != SQLITE_OK) {
sqlite3_close(db);
NSLog(@"数据库打开失败");
}
NSString *sqlCreateTable = @"CREATE TABLE IF NOT EXISTS PERSONINFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, score INTEGER, time INTEGER)";
NSLog(@"创表");
[self execSql:sqlCreateTable];//插入初始数据
NSString *sql1 = [NSString stringWithFormat:
@"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
TABLENAME, NAME, SCORE, TIME, @"张三", @"1", @"20"];
NSString *sql2 = [NSString stringWithFormat:
@"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
TABLENAME, NAME, SCORE, TIME, @"老六", @"2", @"30"];
NSString *sql3 = [NSString stringWithFormat:
@"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
TABLENAME, NAME, SCORE, TIME, @"老4", @"4", @"37"];
NSString *sql4 = [NSString stringWithFormat:
@"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
TABLENAME, NAME, SCORE, TIME, @"老5", @"5", @"39"];
[self execSql:sql1];
[self execSql:sql2];
[self execSql:sql3];
[self execSql:sql4];
NSString *sqlQuery = @"SELECT * FROM PERSONINFO ORDER BY score DESC";
sqlite3_stmt * statement;
NSMutableArray *dataArr = [[NSMutableArray alloc]init];
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
char *name = (char*)sqlite3_column_text(statement, 1);
NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
int scoree = sqlite3_column_int(statement, 2);
int time = sqlite3_column_int(statement, 3);
NSString *stuData = [NSString stringWithFormat:@"name:%@ score:%d time:%d",nsNameStr,scoree, time];
[dataArr addObject:stuData];
}
}
sqlite3_close(db);
lableone.text = [dataArr objectAtIndex: 0];
labletwo.text = [dataArr objectAtIndex: 1];
lablethree.text = [dataArr objectAtIndex: 2];
}
-(IBAction)buttonqc{
//清除数据库里所有数据
NSString *delete = @"delete from PERSONINFO";
[self execSql:delete];
}
lable1.alpha=0.0;
lable2.alpha=0.0;
lable3.alpha=0.0;
lable4.alpha=0.0;//隐藏