我與像 1多個溶液試圖檢索)除NSData的 2)除的NSString 3)試圖與NSKeyedUnarchiver想要SQLite中插入完整的JSON響應數據(字典)中並用字典響應
沒什麼將在我的情況下工作。檢查連接JSON數據
代碼從源碼
- (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;
}
retrive保存和檢索數據 -
-(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;
}
碼,我用我的控制器
NSLog(@"%@",[[PDFManager getSharedInstance]findAllBook]);
NSMutableArray *arr = [[[PDFManager getSharedInstance]findAllBook]valueForKey:@"savedBOOKDetail"];
NSLog(@"%@",arr);
NSMutableDictionary *dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:[arr objectAtIndex:0]];
NSLog(@"%@",dictionary);
蓋伊我有嘗試多次,但仍然面臨問題時總是得到空值回收時,您可以請提供一些解決方案來解決這個問題。
你有沒有使用調試器通過這段代碼?執行路徑是你期望的嗎?由於你沒有提供任何實際發生的細節,所以沒有人能真正幫助你。 – rmaddy
是的,先生我調試每一步,我期望我提到我想保存我的JSON數據,以便我可以檢索和使用它們。 NSData完美添加,但它在檢索時顯示空值,所以我在代碼中是錯誤的我還應該解釋什麼? –
我問你發佈的代碼是否真的在做你期望的。逐行進行。每條生產線是否按預期運行?每一行是否給出正確的結果?你怎麼知道'NSData'被完美添加? – rmaddy