Sqlite - “无法理解的存档”问题
Posted
技术标签:
【中文标题】Sqlite - “无法理解的存档”问题【英文标题】:Sqlite - "incomprehensible archive" problem 【发布时间】:2009-11-09 09:36:01 【问题描述】:我正在开发一个 iphone/Ipod touch 项目,该项目涉及从 sqlite 数据库中保存和获取数据。它工作正常,但在开发的某些时候我得到这个错误(当应用程序启动时):
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** -[NSKeyedUnarchiver initForReadingWithData:]:无法理解的存档(0x4e、0x49、0x42、0x41、0x72、0x63、0x68、0x69)” 2009-11-09 10:08:28.810 FagNavigasjon[1627:20b]
以前我只能通过恢复到早期的开发点并继续来解决这个问题。这次我发现如果我注释掉代码的某个部分,应用程序不会崩溃。
while(sqlite3_step(selectstmt3)==SQLITE_ROW)
/*
NSString *navn=[[NSString alloc] initWithUTF8String: (char *)sqlite3_column_text(selectstmt3, 0)];
NSString *telefon=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(selectstmt3, 1)];
NSString *fodselsar=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(selectstmt3, 2)];
NSString *ariframtiden=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(selectstmt3, 3)];
NSString *verneplikt=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(selectstmt3, 4)];
NSString *utdannelse=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(selectstmt3, 5)];
NSString *epost=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(selectstmt3, 6)];
appDelegate.navn=navn;
appDelegate.epost=epost;
appDelegate.telefon=telefon;
appDelegate.fodselsar=fodselsar;
appDelegate.studiear=ariframtiden;
appDelegate.utdannelse=utdannelse;
appDelegate.verneplikt=verneplikt;
*/
当然,该应用程序不再加载数据。此代码以前有效,并且在此错误之前我没有更改它。但是,我已经向数据库中添加了新记录,但是当我在 SQLite 管理器中查看它们时,这些似乎还可以。谁能告诉我什么会导致这个问题?感谢您的任何回复!
【问题讨论】:
【参考方案1】:您是否尝试过逐行取消注释以查看导致问题的行?如果您知道是哪一行造成的,请尝试查看数据库中的数据是否正确,如果您使用版本控制,请尝试将数据库恢复到添加新记录之前的状态。
附言 你看过Core Data吗?它可以让您的生活更轻松。
【讨论】:
感谢您的回答!我已经尝试一点一点地取消注释,这是由第一行引起的: NSString *navn=[[NSString alloc] initWithUTF8String: (char *)sqlite3_column_text(selectstmt3, 0)];据我了解,该行是在数据库中找到的,但是一旦我开始从中读取,我就会收到错误...我还没有检查过核心数据,但我会的。感谢您的建议!【参考方案2】:仅作记录:我已经解决了这个问题,但我仍然不明白如何解决。据我所知,哪个表导致了问题。我使用 SQLlite 管理器进入那里并更改了一些 varchar 字段的值,问题就消失了……不过,旧值看起来还不错。希望我能解释为什么这解决了它...
【讨论】:
以上是关于Sqlite - “无法理解的存档”问题的主要内容,如果未能解决你的问题,请参考以下文章