簡體   English   中英

在iPhone上存儲單人RPG數據的最佳方法是什么

[英]What is the best way store single-player rpg data on iphone

我想存儲兩種類型的數據。 第一個是默認的不可變數據集(例如怪物統計數據,物品數據庫),第二個是角色統計數據,用於在用戶退出應用程序時存儲數據。

我已經很少使用coredata(在資源文件夾中存儲sqlite默認設置)進行學習了。 但我想確切地知道存儲數據的最佳方式是考慮內存,速度和加密。

對於大數據,我建議您使用CoreData或Sqilte(您可能希望查看一個名為FMDB的sqlite包裝器。)

為了獲得更安全的數據,例如統計數據得分,我建議您使用鑰匙串( 示例 )。

對於沒有安全小數據的情況,可以使用NSUserDefaults

NSArray *stringsArray = [[NSArray alloc] arrayWithObjects: string1, string2, string3, nil];
[[NSUserDefaults standardUserDefaults] setObject:stringsArray forKey:@"MyStrings"];
[[NSUserDefaults standardUserDefaults] synchronize]

我有點偏見,但我更喜歡sqlite。 我整理了一些在某些項目中使用的代碼示例。 讓我知道您是否想查看其他一些代碼示例。

//
//  SQLiteFunctions.h
//

#import <sqlite3.h>
#import "Users.h"

@interface SQLiteFunctions : NSObject
{
@public

@private
    char *error;
    sqlite3 *dbPointer;
    sqlite3_stmt *sqlStatement;
}

@property (nonatomic, strong) Users *users;
@property (nonatomic, strong) NSMutableArray *returnData;

-(BOOL)openBundleDatabase:(int)bibleversion;
-(void)closeDatabase;
-(int)getUserRecords:(const char *)sqlquery;

@end

**

//
//  SQLiteFunctions.m
//

#import "SQLiteFunctions.h"

@implementation SQLiteFunctions
@synthesize returnData;
@synthesize users;

-(BOOL)openBundleDatabase
{
    // initializing db file access
    NSFileManager *fileMgr = [NSFileManager defaultManager];
    NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"dbname.sqlite"];

    // testing to see if database was found
    BOOL success = [fileMgr fileExistsAtPath:dbPath];
    if(!success)
    {
        // can't find database
        NSLog(@"Cannot locate database file '%@'.", dbPath);
        return NO;
    }

    // testing for other error
    if(!(sqlite3_open([dbPath UTF8String], &dbPointer) == SQLITE_OK))
    {
        // logging other error
        NSLog(@"An error has occured: %s", sqlite3_errmsg(dbPointer));
        return NO;
    }

    // returning success
    return YES;
}

-(void)closeDatabase
{
    // finalizing and closing the database
    sqlite3_finalize(sqlStatement);
    sqlite3_close(dbPointer);
}

-(int)getUserRecords:(const char *)sqlquery
{
    // retreiving database values
    if ([self getRecords:sqlquery])
    {
        // setting the date format
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"MM/dd/yyyy"];

        // looping through existing return rows
        while (sqlite3_step(sqlStatement)==SQLITE_ROW)
        {
            // retreiving database values
            users = [[Users alloc] init];

            // retreiving database values
            users.user_name = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 0)];
            users.user_id = sqlite3_column_int(sqlStatement,1);
            users.last_logged = [dateFormat dateFromString:[NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 2)]];
            users.consecutive_days = sqlite3_column_int(sqlStatement,3);
            users.audio = sqlite3_column_int(sqlStatement,4);
            users.profile_skip = sqlite3_column_int(sqlStatement,5);
            users.anim_speed = sqlite3_column_int(sqlStatement,6);
            users.display_font = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 7)];

            // adding object to the return data array
            [returnData addObject:users];
        }
    }

    // returning number of rows in the array
    return [returnData count];
}

**

//
//  Users.h
//

#import <Foundation/Foundation.h>

@interface Users : NSObject

@property (nonatomic,copy) NSString *user_name;
@property (nonatomic,assign) NSInteger user_id;
@property (nonatomic,copy) NSDate *last_logged;
@property (nonatomic,assign) NSInteger consecutive_days;
@property (nonatomic,assign) BOOL audio;
@property (nonatomic,assign) BOOL profile_skip;
@property (nonatomic,assign) NSInteger anim_speed;
@property (nonatomic,copy) NSString *display_font;

@end

**

//
//  Users.m
//

#import "Users.h"

@implementation Users
@synthesize user_name;
@synthesize user_id;
@synthesize last_logged;
@synthesize consecutive_days;
@synthesize audio;
@synthesize profile_skip;
@synthesize anim_speed;
@synthesize display_font;

@end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM