Sqlite - “难以理解的存档”问题

时间:2009-11-09 09:36:02

标签: objective-c iphone cocoa-touch

我正在开发一个涉及从sqlite数据库保存和获取数据的iphone / Ipod touch项目。它工作正常,但在开发的某些时候我得到这个错误(当应用程序启动时):

由于未捕获的异常'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管理器中查看它们时,这些似乎没问题。谁能告诉我什么会导致这个问题?我很感谢任何回复!

2 个答案:

答案 0 :(得分:1)

您是否尝试逐行取消注释每一行以查看导致问题的哪一行?如果您知道导致它的哪一行,请尝试查看数据库中的数据是否正确,如果您正在使用版本控制,请尝试将数据库恢复为添加新记录之前的数据。

P.S。 你看过Core Data了吗?它可以让你的生活更轻松。

答案 1 :(得分:0)

仅仅是为了记录:我已经解决了这个问题,虽然我仍然不明白如何。因为我知道哪个表引起了问题。我使用SQLlite管理器进入那里并更改了一些varchar字段的值,问题就消失了......但旧值看起来还不错。希望我能解释为什么这解决了它......