2012-11-15 24 views
0

我有這個bug,anImage.URL的值突然變爲零。 anImage是類Image的一個對象。數組中有5個這樣的值。不知何故,至少有一個人的網址變成了零。如何在覈心數據值發生變化時「打破」?

我不知道那件事發生了什麼變化。

所以我設置了爲類別anImage.URL =東西

-(void) setURL:(NSString *)URL 
{ 

    [super setValue:URL forKey:NSStringFromSelector(@selector(URL))]; 
} 

並設置斷點那裏。

然而,它成爲一個問題,因爲它只是遞歸調用自己。

我該怎麼辦?

當值更改不起作用時,調試器中斷。畢竟它是一個數組。無論如何我應該設置什麼來觀看?

我不知道如何使用keyValueObserving。

基本上我想重新實現 - (void)setURL:(NSString *)URL的工作方式與之前完全一樣。唯一的區別是我想在那裏放置一個斷點。

回答

2

您可以實現調試或設置斷點的自定義setter方法。

在「核心數據編程指南」中的Custom Attribute and To-One Relationship Accessor Methods中可以找到一個示例。

您在託管對象子類「圖像」(如果您還沒有)上創建一個類別(例如「MyAccessors」)。在實現文件「圖片+ MyAccessors.m」添加

@interface Image (PrimitiveAccessors) 
- (void) setPrimitiveURL:(NSString *)newURL; 
@end 

@implementation Image (MyAccessors) 

- (void)setURL:(NSString *)newURL 
{ 
    [self willChangeValueForKey:@"URL"]; 
    [self setPrimitiveURL:newURL]; 
    [self didChangeValueForKey:@"URL"]; 
} 

@end 

的「絕招」是(和我花了一些時間來弄清楚這一點),你必須聲明原始訪問在不同類別,不在您實施自定義訪問器方法的類別中。

或者,也可以實現自定義訪問是這樣的:

- (void)setURL:(NSString *)newURL 
{ 
    [self willChangeValueForKey:@"URL"]; 
    [self setPrimitiveValue:newURL forKey:@"URL"]; 
    [self didChangeValueForKey:@"URL"]; 
} 

在這種情況下,你不必申報原始的訪問方法。

+0

沒有可見的界面圖像響應選擇器setPrimitiveURL –

+0

我可以將setPrimitveURL添加到擴展接口,但它然後抱怨不完整的實現。 –

+0

@JimThio:嘗試'[self setPrimitiveValue:newURL forKey:@「URL」];'而不是。 –

0

這不是問題的直接答案。問題是如何調試。

嗯,我發現了錯誤。當NSManagedObject行爲不正常時,請確保您檢查您不跨線程使用managedObject上下文。從技術上講,你可以與執行阻止,但這是一個不同的故事。

我只是想分享此。我會嘗試Martin的解決方案。

相關問題