2012-09-26 108 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