- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望这不是一个重复的问题。我似乎找不到任何类似的东西。大多数核心数据问题似乎与新对象创建有关...
我有一个包含大约 23,000 个项目的数据库的程序。我正在尝试创建导出/导入功能以将数据发送到其他设备(未与 iCloud 链接)。
导出工作正常,电子邮件也是如此......
我有导入功能,但运行缓慢(稍后会详细介绍,似乎不能很好地与 iPhone 5 或 iPad 3 配合使用)
我有一个函数可以解析我导入到 NSArray (_importedRows) 中的数据,然后我运行以下代码:
self.managedObjectContext = [(AppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext];
NSManagedObjectContext *ctx = self.managedObjectContext;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"CHECKLIST"
inManagedObjectContext:ctx];
[fetchRequest setEntity:entity];
ImportedData *importedData;
NSString *verify;
NSError *error = nil;
NSManagedObject *updatedObject;
NSArray *matchingItems;
for (int i = 0; i < [_importedRows count]; i++) {
importedData = [_importedRows objectAtIndex:i];
verify = importedData.uniqueID;
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"uniqueID == %@", verify]];
[fetchRequest setFetchLimit:1];
matchingItems = [ctx executeFetchRequest:fetchRequest error:&error];
for (updatedObject in matchingItems) {
HUD.detailsLabelText = [NSString stringWithFormat:@"Updating %@" , [updatedObject valueForKey:@"figureName"]];
[updatedObject setValue:importedData.numberOwned forKey:@"numberOwned"];
[updatedObject setValue:importedData.numberWanted forKey:@"wishList"];
[updatedObject setValue:importedData.availableTrade forKey:@"tradeList"];
}
[ctx save:&error];
if (error != nil) {
NSLog(@"error saving managed object context: %@", error);
}
}
基本上,我正在获取一个核心数据实体,然后遍历我的数组以检查匹配项。当我找到匹配项(uniqueID 谓词)时,我将使用导入的数据更新对象。这段代码在我的 iPhone 4s 上运行良好,但速度很慢。 4,000 个项目大约需要 4-5 分钟。我做错了什么吗?我应该更频繁地调用保存功能吗?
作为奖励,出于某种原因,当我在 iPhone 5 上测试这段代码时,它几乎无法正常工作。10 次中有 9 次(在我的 iPad 3 上有 50% 的时间)我得到了
“1 月 14 日 08:06:44:* 由于未捕获的异常‘NSInvalidArgumentException’而终止应用程序,原因:‘-[__NSCFSet addObject:]:尝试插入 nil’”
在控制台中。想法?
如果需要更多详细信息,请告诉我!
更新:似乎 handleOpenURL 被调用了两次......一次在 applicationdidfinishlaunching
NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
如果 (url != nil && [url isFileURL]) {
[self.window.rootViewController performSelector:@selector(showWithLabel:) withObject:url afterDelay:6];
}
一旦来到这里:
-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{ if (url != nil && [url isFileURL]) { [self.window.rootViewController performSelector:@selector(showWithLabel:) withObject:url]; } return YES; }
我必须将它们都放在应用程序委托(delegate)中,否则该函数不会总是被调用(一次用于应用程序启动时,一次用于应用程序已经在后台,我相信)- 我'我们添加了一个检查以防止它在 showWithLabel 线程中第二次启动,但它似乎不是一个非常优雅的解决方案......
更新:@mundi 建议清理 fetchedresults 代码如下:
NSArray *importedIDs = [_importedRows valueForKeyPath:@"uniqueID"];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:@"CHECKLIST"
inManagedObjectContext:ctx];
fetchRequest.predicate = [NSPredicate predicateWithFormat:
@"uniqueID in %@", importedIDs];
NSError *error = nil;
NSManagedObject *updatedObject;
NSArray *matchingItems;
matchingItems = [ctx executeFetchRequest:fetchRequest error:&error];
ImportedData *importedData;
for (int i = 0; i < [_importedRows count]; i++) {
importedData = [_importedRows objectAtIndex:i];
for (updatedObject in matchingItems) {
if ([importedData.uniqueID isEqualToString:[updatedObject valueForKey:@"uniqueID"]]) {
HUD.detailsLabelText = [NSString stringWithFormat:@"Updating %@" , [updatedObject valueForKey:@"figureName"]];
[updatedObject setValue:importedData.numberOwned forKey:@"numberOwned"];
[updatedObject setValue:importedData.numberWanted forKey:@"wishList"];
[updatedObject setValue:importedData.availableTrade forKey:@"tradeList"];
}
}
}
[ctx save:&error];
我确信它仍然可以更清晰一些,并且实际更新部分(除了将 fetchedresults 中的每个项目与初始数组中的每个项目进行比较以确保它们已更新之外,我不确定该怎么做正确,但组合的 fetchedresults 极大地提高了速度(最初 4000 项需要 240 秒,现在在 80-120 秒之间)
首先对数组进行排序,然后按顺序更新,这再次极大地加快了速度:
NSArray *matchingItemsSorted;
matchingItemsSorted = [matchingItems sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSString *first = [a valueForKey:@"uniqueID"];
NSString *second = [b valueForKey:@"uniqueID"];
return [first caseInsensitiveCompare:second];
}];
NSArray *importedRowsSorted;
importedRowsSorted = [_importedRows sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSString *first = [a valueForKeyPath:@"uniqueID"];
NSString *second = [b valueForKeyPath:@"uniqueID"];
return [first caseInsensitiveCompare:second];
}];
int i = 0;
for (updatedObject in matchingItemsSorted) {
NSLog(@"do we match? %@ : %@", [[importedRowsSorted objectAtIndex:i] valueForKeyPath:@"uniqueID"], [updatedObject valueForKey:@"uniqueID"]);
HUD.detailsLabelText = [NSString stringWithFormat:@"Updating %@" , [updatedObject valueForKey:@"figureName"]];
[updatedObject setValue:[[importedRowsSorted objectAtIndex:i] valueForKeyPath:@"numberOwned"] forKey:@"numberOwned"];
[updatedObject setValue:[[importedRowsSorted objectAtIndex:i] valueForKeyPath:@"numberWanted"] forKey:@"wishList"];
[updatedObject setValue:[[importedRowsSorted objectAtIndex:i] valueForKeyPath:@"availableTrade"] forKey:@"tradeList"];
i++;
}
4000 strip 有 nslog 的项目需要 13 秒左右……现在唯一奇怪的是,当我注释掉 nslog 时,它经常崩溃……它发生得如此之快以至于破坏了核心数据——当它没有发生时'崩溃,只需要大约 4 秒?
谢谢,扎克
最佳答案
你有两个嵌套循环。使用此模式可以加快速度:
NSArray *importedIDs = [_importedRows valueForKeyPath:@"uniqueID"];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:@"CHECKLIST"
inManagedObjectContext:ctx];
fetchRequest.predicate = [NSPredicate predicateWithFormat:
@"uniqueID in %@", importedIDs];
像这样,您可以获取一个包含所有匹配项的数组。
关于ios - Core Data 多项编辑效率与随机误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14319132/
我有一个任务,必须求解线性方程组 Ax =B,其中 A 是 10000 量级的稀疏矩阵。我正在使用 csparse 来求解它。在我的初始实现中,出于演示目的,A 是 3*3 阶单位矩阵,B ={1,2
我正在尝试训练随机森林模型,但出现以下错误。我需要对分类模型使用不同的设置来解决 RMSE 问题吗?我尝试将“好”转换为一个因素,但这引发了一个新错误。 错误: Error in train.defa
当使用 %Lf 打印时,一个大的 double 值被改变以下组合的值给出正确的结果小数点前9位/小数点后6位例如用 %Lf 打印的小数点前 9 位的值输入:3435537287.32输出:343553
我正在尝试实现高度为 100% 的重复垂直背景。遗憾的是,每当我试图通过仅添加纯文本来扩展页面的高度时,具有 100% 高度和背景重复的背景就会被切掉。我只想让背景重复。这是屏幕截图。 http://
所以我有: t = [0.0, 3.0, 5.0, 7.2, 10.0, 13.0, 15.0, 20.0, 25.0, 30.0, 35.0] U = [12.5, 10.0, 7.6, 6.0,
我使用了 Nister 的 5 点法来计算基本矩阵。使用 RANSAC 和 Sampson 错误阈值进一步改进了异常值拒绝。我随机选择 5 个点集,估计基本矩阵并评估匹配向量的 Sampson 误差。
为分类问题运行 gbm 函数时。我收到以下错误: Error in res[flag, ] 0.5,1,0) table(pred,df$Group) pred 0 1 0 98
我使用 Angular ngTagsInput,我的列表如下: [{text: "4353453"}, {text: "453453"}, {text: "4534534"}, {text: "53
我正在尝试 Angular 问题,并且坚持理解错误,这意味着如果我无法理解错误,我将无法前进,例如 zone.js:654 Unhandled Promise rejection: Failed to
我有一个关于在线性混合模型上运行事后测试的问题: 我正在 lme4 中运行一个线性混合模型,分为 3 组,每组 5 条蛇,每组采用不同的通气率 (Vent),在不同的位置进行测量时间点 (Time),
我正在尝试运行逻辑回归并不断收到“NA”错误。问题是它说有 NA 的列没有 NA,全是 0 或 1。我的代码如下: #V1=race, V2=momcounts of breast cancer, V
我在输出之间得到随机 NaN。 Random Temp:61.816288952756864 'F Random Temp:NaN 'F Random Temp:NaN 'F Random Temp:
我正在尝试通过取下平板框架来减少我的大炮天文图像,这很有效。但它使所有值都非常低(所以几乎是黑色图片),这就是为什么我也想将其乘以平均值。然而这给了我一个错误。 (虽然没有乘法它也能工作。) 有人知道
我正在使用 adaboost 构建一个模型,并尝试让 roc 图发挥作用。这是我的代码: ens=fitensemble(X,y,'AdaBoostM1',100,'Tree'); [ytest, s
当尝试使用 Protractor 和 Angular Testing 模态窗口上的可见按钮时,我收到以下错误: UnknownError: unknown error: Element is not
我正在尝试使用命令通过 Yeoman 构建 Angular “哟有 Angular ” 一切正常,直到我到达 tmp 目录: npm ERR! Error: EACCES, mkdir '/home/
我在使用 OpenCV 计算立体声对的校正时遇到一些问题:stereoCalibrate 返回高均方根误差,我得到了错误的校正对。我尝试了我的整改程序和 opencv 提供的 stereo_calib
我在 Mac (OS X 10.9) 上安装了 Yeoman,并且正在尝试运行 yo angular。 我收到以下错误: path.js:384 throw new TypeError('Ar
我有运行循环的线程。我需要该循环每 5 毫秒运行一次(1 毫秒错误)。我知道 Sleep() 函数并不精确。 你有什么建议吗? 更新。我不能用其他方式做到这一点。在循环结束时,我需要某种 sleep
我一直在试验 FFT 算法。我使用 NAudio 以及来自互联网的 FFT 算法的工作代码。根据我对性能的观察,生成的音调不准确。 我将 MIDI(从 GuitarPro 生成)转换为 WAV 文件(
我是一名优秀的程序员,十分优秀!