1

アプリにコアデータを使用していますが、現時点ではこの問題で立ち往生しています。

私のアプリはCoreDataモデル2エンティティで正常に動作しています

UserDetailsSiteLocation

ここに画像の説明を入力してください

したがって、データをとにフェッチしUserDetails、ユーザーからNSPredicate作成するSiteLocations「UserProject」をUITableView使用してに追加するfetchControllerと、これは正常に機能します。すべてのプロジェクトのリストを取得します。

次に、UserDetailspostcode属性をSiteLocationエンティティに追加します-属性の場合、マップ上にsitePostCodeすべてを表示できるようにSitelocationします。

エンティティに2番目の属性postcodeをフェッチするにはどうすればよいですか?SiteLocation

@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;

}
4

1 に答える 1

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;

これで大丈夫ですか?

于 2012-10-03T12:57:49.430 に答える