亲爱的社区。 Bellow是代码的一部分,它起作用,但产品对我来说有两个问题(代码在AppDelegate主线程中工作并从select对象开始并按下按钮: 有时,我不明白我在代码中看到错误的地方。我无法理解,哪里出现了错误(你可以看到它),但是如果我有内部数据(SQLLite文件大约是70Mb),就会发生这种情况。 2.当删除过程正常时,应用程序开始从40Mb到512Mb占用内存并在完成过程后保持在同一级别。内存GC已启用。
你能提出一些优化建议吗?我疯了两个星期,在那里我查看谷歌和其他资源,并尝试在我的应用程序中组合代码。
P.S。一些注意事项 - 如果我不保存moc,我无法工作,bcs在数据删除后立即开始同步并填充相同的数据。如果我不进行保存,我会为每个实体提供双倍的容量。
2011-01-21 12:54:11.158 snow [14721:9da7]在保存之前无法处理挂起的更改。 100次尝试后,上下文仍然很脏。通常,这种递归弄脏是由错误的验证方法,-willSave或通知处理程序引起的。 2011-01-21 12:54:11.160 snow [14721:9da7] *由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'在保存之前未能处理挂起的更改。 100次尝试后,上下文仍然很脏。通常,这种递归弄脏是由错误的验证方法,-willSave或通知处理程序引起的。 * 在第一次投掷时调用堆栈: ( 0 CoreFoundation 0x00007fff885317b4 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x00007fff88bc10f3 objc_exception_throw + 45 2 CoreData 0x00007fff8005a654 - [NSManagedObjectContext(_NSInternalChangeProcessing)_prepareForPushChanges:] + 244 3 CoreData 0x00007fff8005a0af - [NSManagedObjectContext save:] + 207 4 snow 0x0000000100006fe9 __30- [AppDelegate syncOneCarrier:] _ block_invoke_0 + 1657 5基础0x00007fff87c4e682 - [NSBlockOperation main] + 157 6基础0x00007fff87c3ede4 - [__ NSOperationInternal start] + 681 7基金会0x00007fff87d1dbeb __doStart2 + 97 8 libSystem.B.dylib 0x00007fff85f082c4 _dispatch_call_block_and_release + 15 9 libSystem.B.dylib 0x00007fff85ee6831 _dispatch_worker_thread2 + 239 10 libSystem.B.dylib 0x00007fff85ee6168 _pthread_wqthread + 353 11 libSystem.B.dylib 0x00007fff85ee6005 start_wqthread + 13
NSUInteger x = 0;
NSError *error = nil;
for (NSManagedObject *carrier in [carriersArrayVisible selectedObjects])
{
NSString *carrierName = [NSString stringWithString:[carrier valueForKey:@"name"]];
[carriersToExecute addObject:carrierName];
[managedObjectContext deleteObject:carrier];
//[managedObjectContext processPendingChanges];
if (x % 10 == 0) {
//[managedObjectContext save:&error];
[managedObjectContext processPendingChanges];
if (error) NSLog(@"Failed to save to data store syncOneCarrier: %@", [error localizedDescription]);
[pool drain],pool = nil;
pool = [[NSAutoreleasePool alloc] init];
}
x++;
}
[pool drain],pool = nil;
[managedObjectContext save:&error];
答案 0 :(得分:0)
根据错误,您在某处的验证方法中做了一些不好的事情。
先检查一下,发布您拥有的任何验证码,然后有人可以帮您解决此问题。