2012-10-03 150 views
1

我正在使用核心數據爲我的應用程序,但我困在此刻的問題。核心數據關係

我的應用程序工作正常與核心數據模型2名的實體

UserDetailsSiteLocation

enter image description here

所以我獲取數據到UserDetailsNSPredicate創建了用戶的SiteLocations「 UserProject「使用fetchController添加到UITableView,這工作正常。我列出了所有的項目。

現在我想添加的UserDetails postcode屬性爲SiteLocation實體 - 對於屬性sitePostCode這樣我就可以在地圖上顯示所有Sitelocation

如何獲取第二個屬性postcodeSiteLocation實體?

@implementation SiteLocation (Create) 

+(SiteLocation *)siteLocationWithName:(NSString *)sitename inManagedObjectContext:(NSManagedObjectContext *)context 
{ 
SiteLocation *projectName = nil; 

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SiteLocation"]; 
request.predicate = [NSPredicate predicateWithFormat:@"siteName = %@",sitename]; 
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"siteName" ascending:YES]; 
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; 

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

if (!siteLocations || ([siteLocations count] > 1)) { 
    // handle error 
    NSLog(@"site = 0"); 

} else if (![siteLocations count]) { 
    projectName = [NSEntityDescription insertNewObjectForEntityForName:@"SiteLocation" 
               inManagedObjectContext:context]; 
    projectName.siteName = sitename; 
    //projectName.sitePostCode = sitePostCode; 

} else { 
    projectName = [siteLocations lastObject]; 
} 

NSLog(@"project name = %@", projectName); 
return projectName; 

} 

創建UserDetails代碼

+(UserDetails*)userWithJsonInfo:(NSDictionary*)jsonInfo inManagedObjectContext:(NSManagedObjectContext *)context; 
{ 
UserDetails *userdetail = nil; 

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"UserDetails"]; 
request.predicate = [NSPredicate predicateWithFormat:@"userName = %@", [jsonInfo objectForKey:Employee_Name]]; // update Employee_Number 
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"userName" ascending:YES]; 
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; 

NSError *error = nil; 

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

if (!matches || ([matches count] > 1)) { 
    //error handler 
} else if ([matches count] == 0){ 
    userdetail = [NSEntityDescription insertNewObjectForEntityForName:@"UserDetails" inManagedObjectContext:context]; 
    userdetail.userID = [jsonInfo objectForKey:ID]; 
    userdetail.userName = [jsonInfo objectForKey:Employee_Name]; 
    userdetail.userEmail = [jsonInfo objectForKey:Email_Address]; 
    userdetail.userMobile = [jsonInfo objectForKey:Phone_Handheld_No]; 
    userdetail.userPhoto = [jsonInfo objectForKey:PhotoURL]; 
    userdetail.postcode = [jsonInfo objectForKey:Project_Postcode]; 
    userdetail.userProject = [jsonInfo objectForKey:Project_Description]; 
    userdetail.projectUsers = [SiteLocation siteLocationWithName:[jsonInfo  objectForKey:Project_Description]inManagedObjectContext:context]; 

    //NSLog(@"user detail = %@", userdetail.userName); 


} else { 
    userdetail = [matches lastObject]; 
} 

return userdetail; 

} 
+0

你可以發佈代碼而不是截圖嗎?謝謝 –

+0

你能否更好地解釋你的目標?目前尚不清楚。此外,什麼是*位置*實體?它代表* SiteLocation *嗎? –

+1

是的,抱歉SiteLocation,編輯和添加代碼感謝 – HernandoZ

回答

2

也許我我以前不明白你的問題非常好,但你爲什麼不改變方法

+(SiteLocation *)siteLocationWithName:(NSString *)sitename inManagedObjectContext:(NSManagedObjectContext *)context 

+(SiteLocation *)siteLocationWithName:(NSString *)sitename postCode:(NSString*)code inManagedObjectContext:(NSManagedObjectContext *)context 

所以,當你創建一個UserDetails通還的代碼你有興趣:

userdetail.projectUsers = [SiteLocation siteLocationWithName:[jsonInfo objectForKey:Project_Description] postCode:[jsonInfo objectForKey:Project_Postcode] inManagedObjectContext:context]; 

SiteLocation類別

request.predicate = [NSPredicate predicateWithFormat:@"siteName = %@ AND postCode = %@", sitename, code]; 

// other code here... 

projectName.siteName = sitename; 
projectName.sitePostCode = code; 

這是正確的嗎?

+0

太棒了,我沒有你可以做到這一點,非常感謝。 – HernandoZ