【问题标题】:Working with retrieved core data使用检索到的核心数据
【发布时间】:2012-09-26 08:58:07
【问题描述】:

似乎找不到任何问答或任何对我有帮助的东西,但如果你找到一些,请随时链接! 我从核心数据实体中提取了数据,并使用 setPropertiesToFetch 提取了“行号”列表。 现在我想要的是取任何设置为 nil 的行号并将它们更改为 0。

问题 1) '无法识别的选择器发送到实例 0x59ef30'。通过注释掉其他人,我知道这个错误来自“if”行,但我不确定是什么原因造成的!

问题 2) 我希望它在增加计数后执行的操作再次运行,因此它会检查下一个对象,但我真的不确定执行此操作的最佳代码。任何方法/代码sn-ps/教程的建议都会很可爱!

这是代码(上面的获取请求工作正常:))

changeTo0 = [[context executeFetchRequest:fetchRequest error:&error] mutableCopy];
NSLog(@"What is even in this array anyway? %@", changeTo0);
[fetchRequest release];

NSLog(@"In the array there is %u records", [changeTo0 count]);

NSInteger count = 0;
Fsode *details = [changeTo0 objectAtIndex:count];
NSLog(@"In details we have %@", details);        

if ([details lineNumber] == nil){
   [details setValue:0 forKey:@"lineNumber"];
   ++count
   NSLog(@"HERE");
}

【问题讨论】:

  • 您能谈谈您的模型吗?你在使用NSManagedObject 子类吗?
  • 无法识别的选择器消息还应包括类的名称和选择器的名称。了解这些可能会有用。
  • 对不起各位!是的,我正在使用 NSManagedObject,我对目标 C (2 个月左右)还是很陌生,所以对我来说很陌生,哈哈。等一下会报错...
  • NSKnownKeysDictionary1 lineNumber]:无法识别的选择器发送到实例 0x59ef30 2012-09-26 09:49:38.059 App[383:707] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“ -[NSKnownKeysDictionary1 lineNumber]:无法识别的选择器发送到实例 0x59ef30'

标签: ios objective-c xcode core-data


【解决方案1】:

关于第一个问题,您应该谈谈错误(请参阅 Phillip Mills 评论)和模型。 Fsode 实体是否有一个名为 lineNumber 的属性?它是什么类型的?

关于第二个问题,请求只执行一次,如下所示:

NSArray* results = [context executeFetchRequest:fetchRequest error:&error];
NSLog(@"What is even in this array anyway? %@", results);

int count = 1;
for(NSManagedObject* obj in results) {

    // I suppose lineNumber is of type NSNumber
    int numberValue = [[obj valueForKey:@"lineNumber"] intValue];    
    if(numberValue == 0) {

        [obj setValue:[NSNumber numberWithInt:count] forKey:@"lineNumber"];
        count++;
    }
}    

[fetchRequest release];

// do a save here...

附:阅读您的代码,我不确定第二个问题。随意解释您想要实现的目标。

我使用的代码为每个行号为零的对象递增lineNumber。 所以第一个对象有 1,第二个有 2,依此类推。如果您想为这些对象添加一个恒定的行号,请替换

[obj setValue:[NSNumber numberWithInt:count] forKey:@"lineNumber"];

[obj setValue:[NSNumber numberWithInt:1] forKey:@"lineNumber"]; 并删除 count(与您的代码相同)。

【讨论】:

  • FSODE 的 lineNumber 为 int32 和 YES 一个 for 循环,没想到这一点真是太愚蠢了,让我试试看
  • 我说保存是通过 'if (![context save:&error]) { } '
  • 好的,没有错误,但是我的保存似乎不起作用 lmao >.
  • 对不起,我不明白这是不是一个问题。无论如何,是的,您可以使用save 来保存上下文。为什么不起作用?
  • 好的,很高兴看到这有帮助。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多