我有超过5000条记录要从服务器加载到我的应用程序并插入数据库。 在成功插入后插入这些记录时,我遇到了这种错误,我的应用程序崩溃了。
数据库在iPhone +错误磁盘i / o错误
中格式错误以下是可能有用的代码段,在这里我逐个获取5个类别的记录并将它们插入数据库
if (tag==1) {
NSMutableDictionary *catDic=[dic valueForKeyPath:@"GetAllRecords.results.categories.category"];
[self performSelectorInBackground:@selector(insertDataInCategoryMaster:) withObject:catDic];
NSMutableDictionary *levelDic=[dic valueForKeyPath:@"GetAllRecords.results.levels.level"];
[self performSelectorInBackground:@selector(insertDataInLevelMaster:) withObject:levelDic];
NSMutableDictionary *queDic=[dic valueForKeyPath:@"GetAllRecords.results.questions.question"];
[self performSelectorInBackground:@selector(insertDataInQueMaster:) withObject:queDic];
[self getQueCatLevelData:2];
}
else if(tag==2){
NSMutableDictionary *queDic=[dic valueForKeyPath:@"GetAllRecords.results.questions.question"];
[self performSelectorInBackground:@selector(insertDataInQueMaster:) withObject:queDic];
[self getQueCatLevelData:3];
}
else if(tag==3){
NSMutableDictionary *queDic=[dic valueForKeyPath:@"GetAllRecords.results.questions.question"];
[self performSelectorInBackground:@selector(insertDataInQueMaster:) withObject:queDic];
[self getQueCatLevelData:4];
}//and so on for 5 also
在每个insertDataInQueMaster中我正在做的事情。
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
for(NSDictionary *queDictionary in dictionary)
{
NSString *strQuery = [NSString stringWithFormat:@"insert into QuestionMaster values(%d,'%@','%@',%d,%d,%d,%d,%d,0,'%@')",[[queDictionary valueForKey:@"questionid"]intValue], [queDictionary valueForKey:@"questiontext"],[queDictionary valueForKey:@"answertext"],[[queDictionary valueForKey:@"categoryid"]intValue],[[queDictionary valueForKey:@"levelid"] intValue],[[queDictionary valueForKey:@"status"]intValue],[[queDictionary valueForKey:@"RangeFrom"]intValue],[[queDictionary valueForKey:@"RangeTo"]intValue],[queDictionary valueForKey:@"Fact"]];
[NSNumber requestWithSynchronousExcuteQuery:strQuery withReturnningError:&error];
if(error)
{
NSLog(@"error description:%@",[[error userInfo] description]);
[[NSUserDefaults standardUserDefaults]setBool:NO forKey:@"FirstTime"];
}
}
count++;
[[NSUserDefaults standardUserDefaults]setInteger:count forKey:@"CheckCount"];
[[NSUserDefaults standardUserDefaults]synchronize];
[pool drain];
当App在AppDelegate.m中加载时,我正在做这些事情,在背景中也是如此 错误来自成功在数据库中插入少量记录后,我认为数据库打开和插入没有问题。
我希望我很清楚, 请评论是否有任何混淆。 等待回复。 提前致谢。
答案 0 :(得分:2)
欢呼,我得到了这个简单的解决方案
我刚放置
@synchronized(self)
{
//My Whole Code for Background methods goes here
}
就是这样,它解决了我的错误并崩溃了。
@synchronized()指令锁定一段代码以供单个线程使用。其他线程被阻塞,直到线程退出受保护的代码 - 也就是说,当执行继续超过@synchronized()块中的最后一个语句时。
@synchronized()指令将任何Objective-C对象作为唯一参数,包括self。