2012-09-26 74 views
0

似乎找不到任何Q & A或任何可以帮助我的东西,但是如果您觉得有些随意链接! 我已经从Core Data实体提取数据,并使用setPropertiesToFetch提取了“行号”列表。 现在我想要的是将任何行号设置为零,并将它们更改为0.使用检索到的核心数据

问题1)'无法识别的选择器发送到实例0x59ef30'。我知道这个错误是从'如果'行通过评论其他人,但我不知道是什么造成了它!

问题2)增加count后我想要做的事情再次运行,因此它检查下一个对象,但我真的不确定最好的代码来做到这一点。方法/代码片段/教程的任何建议将是可爱的!

下面是代码(上面的读取请求的作品就好了:))

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

你能说一说你的模型吗?你在使用'NSManagedObject'子类吗? –

+0

无法识别的选择器消息还应包含类的名称和选择器的名称。这些可能有助于了解。 –

+0

对不起!是的,我使用的是NSManagedObject,对于客观的C(2个月左右),我还是很新的,所以对我来说很光荣。挂起将得到错误... – Craig

回答

4

关于第一个问题,你应该说一些有关的错误(见菲利普·米尔斯评论)和型号。 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(这是因为你的代码不相同)。

+0

FSODE具有lineNumber作为int32和是一个for循环,我多么愚蠢的想不到,让我试试看,保持 – Craig

+0

我是对的说保存是通过'if(![context save:&error]'){ } ' – Craig

+0

好吧,没有错误,但我的保存似乎不工作lmao>。<标记为正确= D – Craig