1

データベースと通信する Web アプリを構築しています。Web アプリでデータベースからすべての情報をダウンロードしてローカルに保存し、(ユーザーがオフラインの場合でも) ローカルでアクセスして編集し、(ユーザーがオンラインの場合) データベースに同期できるようにします。

私のデータベースのすべての行は 2 つの文字列と 3 つの整数で構成されており、データベースには約 1000 ~ 1500 行あります (これでデータベースのサイズがわかります)。

では、どちらが最善の方法でしょうか? この種のデータをユーザーのデバイスにキャッシュすることはできますか? JSONを介してデータベースを取得し、ユーザーがアクセスして作業できるjavascript配列にローカルに保存するのと同じです(前述のように、後の部分はユーザーがオフラインの場合でも作業できるはずです)。これに関するすべての入力は大歓迎です。ここで少なくとも正しい方向に考えていますか?

編集: Web アプリで作業していることを明確にしたいだけです。HTML、CSS、Javascript で開発されたアプリ。私はネイティブの目的の C iOS アプリを行っていません。

4

4 に答える 4

1
make a class of NSObject

@interface abc : NSObject<NSCoding>

@property..... // add properties that you want to save 

-(void)initWithDictionary:(NSMutableDictionary *)dictionary; // override init by passing dictionary with values of your properties

@end

in abc.m file 

implement these functions

-(void)initWithDictionary:(NSMutableDictionary *)dictionary
{

    yourProperty=[dictionary valueForKey:@"propertyKey"];

}

-(void) encodeWithCoder:(NSCoder *)aCoder{

    [aCoder encodeObject:yourProperty forKey:@"propertyKey"];

}

-(id) initWithCoder:(NSCoder *)aDecoder{

    self =[super init];

    if(self){

        [self setyourProperty:[aDecoder decodeObjectForKey:@"yourProperty"]];

    }
    return self;
}


now make a shared class that can be accessed from anywhere

@interface xyz : NSObject
{
    NSMutableArray *allItems;
}

+(xyz *) sharedStore;

-(NSMutableArray *)allItems;

-(abc *) createItem:(NSMutableDictionary *)dictionary;

-(NSString *) saveItemPath;

-(BOOL)saveChanges;


now in xyz.m implement these functions

-(id)init{

    self=[super init];

    if(self){

        NSString *path=[self saveItemPath];

        allItems=[NSKeyedUnarchiver unarchiveObjectWithFile:path];

        if(!allItems){

            allItems=[[NSMutableArray alloc]init] ;//]WithObjects:@"No more item in store", nil];

        }

    }

    return self;
}
+(xyz *)sharedStore{

    static xyz *sharedStore=nil;

    if(!sharedStore){

        sharedStore=[[super allocWithZone:nil]init];

    }

    return sharedStore;

}
+(id)allocWithZone:(NSZone *)zone{

    return [self sharedStore];

}
-(NSArray *)allItems{

    //[allItems insertObject:@"No more items are in store" atIndex:[allItems count]];
    return allItems;

}

-(abc *) createItem:(NSMutableDictionary *)dictionary
{
    abc *p=[[abc alloc] init];
    [p initWithDictionary:dictionary];
    [allItems insertObject:p atIndex:0];
    return p;
}

-(NSString *) saveItemPath
{
    NSArray *documentdirectories=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

    NSString * documentDirectory=[documentdirectories objectAtIndex:0];

    return [documentDirectory stringByAppendingPathComponent:@"items.archive"];

}

-(BOOL) saveChanges
{

    NSString *path=[self saveItemPath];

    return [NSKeyedArchiver archiveRootObject:allItems toFile:path];

}


now you can use the global variable like this

[xyz sharedStore]allItems]

now do one more thing, add this line to application did enter background

[xyz sharedStore]saveChanges];
于 2013-07-12T05:15:43.577 に答える
0

永続性を検討する必要があり、そのための最良のオプションは Core Data です。永続性以外にも、たとえば、私や他の人がここここで概説した他の多くの大きな利点が得られます. 前述のように、アプリのバッキング ストアとして SQLite を使用すると、必要に応じてエントリのオブジェクト表現にアクセスできます。同期を扱っている場合は、iCloud を調べることもできます。iCloud に関する情報は、こちら で確認できます。

于 2012-04-03T22:23:19.247 に答える
0

Web テクノロジーを使用してモバイル アプリを開発している場合に特にデータを保存する最善の方法は、SQLite を使用することです。オフライン モードまたはオンライン モードでデータを保存、取得できます。また、もう 1 つの利点は、ネイティブにすることにした場合、データベースを任意のモバイル デバイスまたはデスクトップ アプリに移植できることです。

さらに質問がある場合やサポートが必要な場合は、私に連絡してください。Web テクノロジで SQLite を使用する方法について詳しく教えてもらえますか?

モバイル アプリ用の Web GUI の設計にかかる時間を節約したい場合は、モバイル Web フレームワークを使用できます。これにより、開発時間が短縮され、デバイス上のネイティブ API にアクセスできるようになります。Sencha をお勧めします: http://www.sencha.com/products/touch/ (Html5、JS、CSS3 に基づいた本当に素晴らしいフレームワーク)

于 2012-04-04T02:15:46.293 に答える
0

Core Data (SQLite を使用) を使用する必要があります。

于 2012-04-03T22:13:49.143 に答える