0

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

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

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

这是代码(上面的获取请求工作得很好:))

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");
}
4

1 回答 1

4

关于第一个问题,您应该谈谈错误(请参阅 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...

PS阅读您的代码,我不确定第二个问题。随意解释你想要达到的目标。

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

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

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

于 2012-09-26T11:29:00.007 回答