2012-04-03 4 views
1

私はデータベースと通信しているWebアプリケーションを構築しています。私はデータベースからすべての情報をダウンロードし、それをローカルに保存して(ユーザがオフラインであっても)ローカルにアクセスして編集できるようにしたいと思う。iPhone上のローカルストレージを使用してデータを保存する - どのような方法ですか?

私のデータベースのすべての行は、2つの文字列と3つの整数で構成されており、私のデータベースに約1000-1500行があります(それはあなたに私のデータベースのサイズについての考えを与えるかもしれません)。

これは最善の方法ですか?どういうわけか、この種のデータをユーザーデバイスにキャッシュすることは可能ですか? JSONを介してデータベースを取得し、ユーザーがアクセスして作業できるjavascript配列にローカルに格納するのと同じように(前述のように、後の部分はユーザーがオフラインであっても機能するはずです)。これに関するすべての入力は非常に高く評価されています。私は少なくともここで正しい方向に考えていますか?

編集:私はウェブアプリケーションで作業していることを明確にしたいと思います。 HTML、CSS、Javascriptでデフラップしたアプリ。私はネイティブの目標C iOSアプリをやっていません。

+1

ルックhttp://www.sencha.com/products/touch/(HTML5、JS、CSS3で本当に素敵なフレームワークベース):私は煎茶をお勧めします。フレームワークはXCodeに含まれています。 libsqlite3.0.dylib – PaulG

+0

新しい[データ保管ガイドライン](https://developer.apple.com/icloud/documentation/data-storage/)に必ず従ってください。あなたがしなければ、あなたはかなりひどく叩かれてしまいます。 –

+0

みんな、私はWebアプリケーションを使って作業していることを明確にしたい。 HTML、CSS、Javascriptでデフラップしたアプリ。私はネイティブの目標C iOSアプリをやっていません。 – nalas

答えて

0

モバイルアプリを開発するためにウェブ技術を使用している場合は、特にデータを保存する最善の方法は、SQLiteを使用することです。オフラインまたはオンラインモードでデータを保存したり、検索したりできます。また、別の利点は、ネイティブになることを決めた場合、任意のモバイルデバイスまたはデスクトップアプリケーションにデータベースを移植できることです。

質問がありましたら、私に連絡してください。私はあなたにウェブテクノロジーでSQLiteを使用する方法の詳細を教えていただけますか?

モバイルアプリのWeb GUIを設計する時間を節約したい場合は、モバイルWebフレームワークを使用して開発時間を短縮し、デバイス上のネイティブAPIにアクセスできるようにします。 SQLiteのに

0

Core Data(SQLiteを使用)を使用してください。

+0

これは完全に真実ではありません。コアデータは、それを定義する場合、SQLiteをバッキングストアとして使用します。コアデータで使用できる他の多くの店舗があります。ストアを定義しないのではなく、デフォルトでSQLiteを取得します。これは明示的に設定する必要があります。 – jmstone617

0

あなたは永続性を調べる必要があります。そのための最良のオプションはコアデータです。永続性を除けば、他の大きな利点がたくさんあります。例えば、私と他の人がherehereのように説明しました。前述したように、SQLiteをアプリケーションのバッキングストアとして使用することができます。そして、必要に応じてエントリのオブジェクト表現にアクセスできます。同期を処理する場合は、iCloudを調べて、hereに関する情報を調べることもできます。

+0

私は、HTML、CSS、Javascriptでデボループ化されたWebアプリケーションで作業していることを明確にしたいだけです。私はネイティブの目標C iOSアプリをやっていません。あなたが話していることではありませんか? – nalas

+0

はい、これは、ネイティブコンポーネントを持つアプリケーションを作成していることを前提としていました。 – jmstone617

2
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]; 
関連する問題