辞書の応答を取得する)NSDataの 2として保存します私の場合はうまくいくでしょう。 retrive は <p>何もNSKeyedUnarchiver</p>で試してみました)NSStringの 3として保存)sqliteは、完全なJSONレスポンスデータを(辞書)を挿入し、私は 1のような複数のソリューションを試してみました
sqliteの
- (BOOL)saveBookData:(NSString *)bookID bookName:(NSString*)bookNames bookTitle:(NSString*)bookTitle valueArr:(NSDictionary *)valueArr
{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSData *theDictionaryData = [NSKeyedArchiver archivedDataWithRootObject:valueArr];
NSString *insertSQL = [NSString stringWithFormat:@"insert into bookDetails(bookID, bookName, bookTitle, valueArr) values (\"%@\",\"%@\", \"%@\", \"%@\")",bookID,bookNames,bookTitle, theDictionaryData];
const char *insert_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(database, insert_stmt,-1, &statement, NULL);
// sqlite3_bind_text(statement, 1, [bookID UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 2, [bookNames UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 3, [bookTitle UTF8String], -1, SQLITE_TRANSIENT);
//sqlite3_bind_text(statement, 4, [valueArr UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_blob(statement, 4, (__bridge const void *)(theDictionaryData) , -1, SQLITE_TRANSIENT);
if (sqlite3_step(statement) == SQLITE_DONE)
{
return YES;
}
else {
return NO;
}
//sqlite3_reset(statement);
}
return NO;
}
からのデータを保存および取得のために添付のJSONデータ
コードをチェックしてください - 私は私のコントローラ
NSLog(@"%@",[[PDFManager getSharedInstance]findAllBook]);
NSMutableArray *arr = [[[PDFManager getSharedInstance]findAllBook]valueForKey:@"savedBOOKDetail"];
NSLog(@"%@",arr);
NSMutableDictionary *dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:[arr objectAtIndex:0]];
NSLog(@"%@",dictionary);
ガイに使用しています
-(NSMutableArray*)findAllBook
{
resultArray = [[NSMutableArray alloc] init];
sqlite3 *database2;
if(sqlite3_open([databasePath UTF8String], &database2) == SQLITE_OK)
{
NSString *sqlStatement_userInfo =[NSString stringWithFormat:@"Select bookID, bookName, bookTitle, valueArr from bookDetails"];
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database2, [sqlStatement_userInfo UTF8String], -1, &compiledStatement, NULL) == SQLITE_OK)
{
while(sqlite3_step(compiledStatement) == SQLITE_ROW)
{
NSMutableDictionary *_dataDictionary2=[[NSMutableDictionary alloc] init];
NSString *_savePdfID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
NSString *_savePdfName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
NSString *_savePdfText = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
// NSString *_savePdfDetails = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];
NSData *retrieveData = [[NSData alloc] initWithBytes:sqlite3_column_blob(compiledStatement, 4) length:sqlite3_column_bytes(compiledStatement, 4)];
//NSDictionary *dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:retrieveData];
//NSLog(@"dict data is %@",dictionary);
[_dataDictionary2 setObject:[NSString stringWithFormat:@"%@",_savePdfID] forKey:@"savedBOOKID"];
[_dataDictionary2 setObject:[NSString stringWithFormat:@"%@",_savePdfName] forKey:@"savedBOOKName"];
[_dataDictionary2 setObject:[NSString stringWithFormat:@"%@",_savePdfText] forKey:@"savedBOOKText"];
[_dataDictionary2 setObject:retrieveData forKey:@"savedBOOKDetail"];
[resultArray addObject:_dataDictionary2];
}
}
else
{
}
// Release the compiled statement from memory
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database2);
return resultArray;
}
コード私が持っています何度も試してみましたが、まだ問題に直面しています。この問題を解決するための解決策を提供してください。
デバッガを使用してこのコードを実行しましたか?実行パスはあなたの期待通りですか?実際に何が起こっているのかについての詳細を提供していないので、誰も本当に助けることはできません。 – rmaddy
はい私はすべてのステップでデバッグを行いますが、私は私のjsonデータを保存したいので、後で私はそれらを取得して使用できると言います。 NSDataは完全に追加されましたが、取得時にnull値を表示していますので、コードが間違っています。他に何を説明する必要がありますか? –
投稿したコードが実際にあなたが期待していることをしているかどうか尋ねます。 1行ずつステップスルーします。各行は期待どおりに動作しますか?各行は適切な結果を出していますか? NSDataが完全に追加されたことをどのように知っていますか? – rmaddy