2014-02-21 60 views
0

在覈心數據,我有一個物業實體,屬性類型整數16當前頁。它是一類ATProperty相關與標量屬性:核心數據取不返回的對象應該

@interface ATProperty : NSManagedObject 

@property(nonatomic, assign) int16_t currentPage; 

@end 


@implementation ATProperty 

@dynamic currentPage; 

@end 

現在我有以下的代碼來執行一個請求:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Property"]; 
request.predicate = [NSPredicate predicateWithFormat:@"currentPage != 0"]; 
NSArray *results = [context executeFetchRequest:request error:nil]; 

大部分的時間,它按預期工作。但有時,我得到以下奇怪的結果:

(lldb)po results 
<__NSArrayI 0x17e61300>(

) 

(lldb)po [context executeFetchRequest:[NSFetchRequest fetchRequestWithEntityName:@"Property"] error:nil] 
<_PFArray 0x17e9f3e0>(
<ATProperty: 0x17ec6400> (entity: Property; id: 0x19178e20 <x-coredata:///Property/t88822504-5974-42F5-B8D2-A62325064AFF28> ; data: { 
    currentPage = 9; 
}) 
) 

(lldb)p (BOOL)[request.predicate evaluateWithObject:0x17ec6400] 
(BOOL) $12 = YES 

所以在管理對象上下文中有一個實體實例。當我執行我的讀取請求時,Core Data不返回這個對象,它返回一個空數組。但是,如果我在上下文中存在的對象上測試相同的謂詞,則謂詞的求值爲YES。這意味着對象應該在結果中。這怎麼可能?

+0

您將錯誤信息傳遞給nil,表示您對此不感興趣。你有沒有看過那個? – user3071962

+0

我沒有,因爲它返回一個(空)數組,所以不應該有錯誤。如果出現錯誤,它應該返回'nil'而不是數組。 – Guillaume

+0

什麼是'performFetchRequest:error:'?這不是標準的核心數據方法。 –

回答

0

你可以請用下面的代碼模擬你的代碼。這對我來說確實很有用,也有助於我們限制崩潰和其他結果問題。

NSManagedObjectContext *managedObjectContext; 
    NSEntityDescription *entityDesc = [NSEntityDescription 
             entityForName:@"Property" 
             inManagedObjectContext:managedObjectContext]; 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:entityDesc]; 

    NSPredicate *pred = 
    [NSPredicate predicateWithFormat:@"currentPage != 0"]; 

    [request setPredicate:pred]; 
    NSManagedObject *matches = nil; 

    NSError *error; 
    NSArray *objects = [context executeFetchRequest:request 
               error:&error]; 

    if ([objects count] > 0) { 
     NSLog(); 
    } 

希望它有幫助。請讓我知道如果我們必須採取另一種解決方案。

+0

功能與原始代碼完全相同。當它甚至不同時,這應該如何幫助?有沒有字符串打印使用'NSLog()'有什麼意義? –