如何将 sqlite3 表分配给 nsarray
Posted
技术标签:
【中文标题】如何将 sqlite3 表分配给 nsarray【英文标题】:how to assign a sqlite3 table to nsarray 【发布时间】:2015-10-14 10:52:32 【问题描述】:我正在开发一个聊天应用程序,因为我使用 sqlite 来存储和检索聊天历史记录,我可以插入值,但是在检索时我得到数组中的 nil 这是我的代码
messageArray=[DBObject AllRowFromTableName:@"chatTable" withUserID:myJID withFriendID:chatWithUser];
for (int i=0; i<[messageArray count]; i++)
Message *msg=[[Message alloc] init];
msg.text=[[messageArray objectAtIndex:i] msg];
if ([[messageArray objectAtIndex:i] lft_rght]==0)
msg.fromMe=YES;
else
msg.fromMe=NO;
msg.type=SOMessageTypeText;
NSString *dateString =[[messageArray objectAtIndex:i] tim_dte];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm,yyyy/MM/dd"];
NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter dateFromString:dateString];
msg.date=dateFromString;
[self.chatHistoryArray addObject:msg];
这是我的检索类广告数据库类是
-(NSMutableArray *)AllRowFromTableName:(NSString *)tableName withUserID:(NSString *)userid withFriendID:(NSString *)friendid
NSMutableArray *array=[[NSMutableArray alloc] init];
NSString *sqlString=[NSString stringWithFormat:@"select *from chatTable where toid='%@' and fromid='%@'",userid,friendid];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &statement, nil)==SQLITE_OK)
while (sqlite3_step(statement)==SQLITE_ROW)
Message *tempSkeleton=[[Message alloc] init];
tempSkeleton.mToID =[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
tempSkeleton.mFromID=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(statement, 2)];
tempSkeleton.text=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(statement, 3)];
//tempSkeleton.fromMe=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(statement, 3)];
tempSkeleton.fromMe=((int)sqlite3_column_int(statement, 4)) ? YES : NO;
tempSkeleton.tim_dte=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(statement, 5)];
[array addObject:tempSkeleton];
// NSLog(@"IN LOOP=>%@",array);
我的 msg.text 为空,请大家帮帮我
【问题讨论】:
您似乎没有返回您创建的array
?准备工作也有效吗?被注释掉的 NSLog "IN LOOP" 在没有被注释掉的时候会触发吗?
【参考方案1】:
在处理返回数组的循环中,这些行...
Message *msg=[[Message alloc] init];
msg.text=[[messageArray objectAtIndex:i] msg];
应该只是……
Message *msg=[[Message alloc] init];
msg.text=[[messageArray objectAtIndex:i] text];
您还应该在循环之外创建一次 NSDateFormatter 并使用它,因为它不是要创建的“快速”对象。
您可能还想重构对[messageArray objectAtIndex:i]
的常量调用。创建一个获取引用一次的局部变量,然后使用它。所以重构的代码看起来像......
messageArray=[DBObject AllRowFromTableName:@"chatTable" withUserID:myJID withFriendID:chatWithUser];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm,yyyy/MM/dd"];
for (int i=0; i<[messageArray count]; i++)
Message * baseMessage = [messageArray objectAtIndex:i];
Message *msg=[[Message alloc] init];
msg.text= baseMessage.text;
msg.fromMe= (baseMessage.left_rght == 0);
msg.type=SOMessageTypeText;
msg.date=[dateFormatter dateFromString:baseMessage.tim_dte];
[self.chatHistoryArray addObject:msg];
您也可以使用快速枚举器,也许可以查看现代目标 c https://developer.apple.com/library/ios/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html
【讨论】:
以上是关于如何将 sqlite3 表分配给 nsarray的主要内容,如果未能解决你的问题,请参考以下文章