2011-07-30 90 views
0

我是coredata的新手,我正在構建一個簡單的數據庫,其結果是一個xml。CoreData - fetch找不到對象

我正在測試以查看記錄是否存在,如果沒有,添加一個新的,然後保存,但是當我再次這樣做時,e保持保存,而不是找到記錄。

這個類方法被調用兩次(xml中的2條記錄),然後我保存在郵件類中。 ActivityID是一個NSNumber。

我在做什麼錯了?

代碼:

+(CompanyActivity *)createActivityWithInfoFromServer:(NSDictionary *)activityDictFromArray inManagedObjectContext:(NSManagedObjectContext *)context { 

    CompanyActivity *companyActivity = nil; 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    request.entity = [NSEntityDescription entityForName:@"CompanyActivity" inManagedObjectContext:context]; 
    request.predicate = [NSPredicate predicateWithFormat:@"ActivityID == %@", [activityDictFromArray objectForKey:@"ActivityID"]]; 

    NSError *error = nil; 
    companyActivity = [[context executeFetchRequest:request error:&error] lastObject]; 

    NSLog(@"activity: %@", companyActivity); 

    if (!error && !companyActivity) { 
      companyActivity = [NSEntityDescription insertNewObjectForEntityForName:@"CompanyActivity" inManagedObjectContext:context]; 
      companyActivity.ActivityID = [NSNumber numberWithInt:[[activityDictFromArray objectForKey:@"ActivityID"] integerValue]]; 
      companyActivity.ActivityDescription_PT = [activityDictFromArray objectForKey:@"ActivityDescription_PT"]; 
      companyActivity.ActivityDescription_EN = [activityDictFromArray objectForKey:@"ActivityDescription_EN"]; 
      companyActivity.DateChangedStamp = [NSDate date]; 
    } 
    else 
      NSLog(@"no Activity created. Errors: %@", error); 

    return companyActivity; 
} 

回答

2

問題出現在NSNumber中。它將記錄保存到數據庫中,但從未找到它們。現在我已經將類型操作數據更改爲NSString。

感謝,

RL

1

首先第一件事情,你漏request。其次,你應該做一些基本的調試來發現問題。設置一些斷點並檢查您的抓取,以確保您插入到抓取中的活動ID是有效值。確保你也用正確的值填寫了你以後創建的對象。看看如何發生,如果問題沒有得到解決,請在進度中添加更多信息。

+0

保羅你好。我在iOS 5中使用ARC。ActivityID有一個值。我認爲這可能與背景有關,但我並不支持。我有一個NSEnumeration,並根據需要多次調用此方法後,我稱[上下文保存]。我認爲問題在這裏......但是,在上面的代碼中,是完全正確的嗎? –

+0

上面的代碼似乎是正確的(假設你的錯誤對象總是零),它高度依賴於正在操作的數據。如果在內存對象中存在任何不良數據,則可能會在保存上下文時收到錯誤。 –

+0

嗨,沒有錯誤。我有NSLog,沒有人給我錯誤...我們可以在iChat或GoogleTalk上聊天嗎,我在這裏發佈結果? iChat:[email protected] googleTalk:[email protected] –

0

在創建新對象後,似乎並未實際保存新對象。嘗試添加以下代碼到您的對象創建塊:

[context save:&error]; 
if(error) { 
    NSLog(@"error saving entities: %@", error); 
}