[英]Core Data addObject one-to-many relationShip
我試圖將對象添加到我的核心數據模型。 但是,當我嘗試顯示它們時,它們不存在。 我正在使用類別作為助手。
+ (Project *)createProjectWithDictionary:(NSDictionary *)dic inManagedObjectContext:(NSManagedObjectContext *)managedObjectContext {
Project *project = nil;
// Build a fetch request to see if we can find this Flickr photo in the database.
// The "unique" attribute in Photo is Flickr's "id" which is guaranteed by Flickr to be unique.
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Project"];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]];
request.predicate = [NSPredicate predicateWithFormat:@"title = %@", [dic[kTagProjectTitle]description]];
// Execute the fetch
NSError *error = nil;
NSArray *matches = [managedObjectContext executeFetchRequest:request error:&error];
// Check what happened in the fetch
if (!matches || ([matches count] > 1)) { // nil means fetch failed; more than one impossible (unique!)
// handle error
} else if (![matches count]) { // none found, so let's create a Photo for that Flickr photo
project = [NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:managedObjectContext];
NSLog(@"Encontrado Primera vez");
project.projectId = [NSNumber numberWithInt:[[dic valueForKey:kTagProjectId] intValue]];
project.title = [dic valueForKey:kTagProjectTitle];
project.estimatedPrice = [NSNumber numberWithInt:[[dic valueForKey:kTagProjectEstimatedPrice] floatValue]];
NSMutableArray *tags = [[NSMutableArray alloc] init];
tags = [dic objectForKey:kTagProjectsTags];
NSMutableSet *tagSet = [[NSMutableSet alloc]init];
for (NSDictionary * tagDic in tags){
NSString *tagName = [tagDic objectForKey:kTagProjectTagName];
Tag *tag = [Tag insertTagName:tagName inManagedObjectContext:managedObjectContext];
[project addTagsObject:tag];
}
// [project addTags:tagSet];
我嘗試將NSMutableSet與addObject:(NSSet * tag)一起使用,並且還與addTagObject一起使用,並且我在NSLog中具有相同的輸出。
for( Tag *tag in project.tags){
NSLog(@"TAG TITLES %@", tag.name);
}
2013-09-30 23:03:36.003 Prototype[28959:c07] TAG TITLES iOS
2013-09-30 23:03:36.004 Prototype[28959:c07] TAG TITLES Windows Phone
}
然后,當我嘗試在單元格中顯示它們時。 我有一個新的NSLog,這是輸出。 為什么在第一個NSLog中我可以看到它們,而在cellForRowAtIndexPath
方法中卻看不到?
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
Project *project = (Project *)[self.data objectAtIndex:indexPath.row];
NSLog(@"TITLE %@", project.tags);
}
輸出值
TITLE Relationship 'tags' on managed object (0x7c60ba0) <Project: 0x7c60ba0> (entity: Project; id: 0x7c60be0 <x-coredata:///Project/tE9F74F99-04BC-43CC-BD68-F435712B3B3C9> ; data: {
estimatedPrice = 1999;
projectId = 418;
tags = (
);
title = "Aplicaci\U00f3n IOS";
"yp_desc" = nil;
}) with objects {(
)}
}
添加標簽后很可能沒有保存上下文。
我建議您使用Magical Record框架( https://github.com/magicalpanda/magicalrecord ),它使Core Data管理變得非常容易!
另一方面,如果您希望不使用它,請嘗試更改:
+ (Project *)createProjectWithDictionary:(NSDictionary *)dic inManagedObjectContext:(NSManagedObjectContext *)managedObjectContext {
Project *project = nil;
// Build a fetch request to see if we can find this Flickr photo in the database.
// The "unique" attribute in Photo is Flickr's "id" which is guaranteed by Flickr to be unique.
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Project"];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]];
request.predicate = [NSPredicate predicateWithFormat:@"title = %@", [dic[kTagProjectTitle]description]];
// Execute the fetch
NSError *error = nil;
NSArray *matches = [managedObjectContext executeFetchRequest:request error:&error];
// Check what happened in the fetch
if (!matches || ([matches count] > 1)) { // nil means fetch failed; more than one impossible (unique!)
// handle error
} else if (![matches count]) { // none found, so let's create a Photo for that Flickr photo
project = [matches lastObject];
NSLog(@"Encontrado Primera vez");
//Makes that only if you want to rehydrate your saved object. At other way I am not sure what yo want to do here :S
project.projectId = [NSNumber numberWithInt:[[dic valueForKey:kTagProjectId] intValue]];
project.title = [dic valueForKey:kTagProjectTitle];
project.estimatedPrice = [NSNumber numberWithInt:[[dic valueForKey:kTagProjectEstimatedPrice] floatValue]];
NSMutableArray *tags = [[NSMutableArray alloc] init];
tags = [dic objectForKey:kTagProjectsTags];
for (NSDictionary * tagDic in tags){
NSString *tagName = [tagDic objectForKey:kTagProjectTagName];
Tag *tag = [NSEntityDescription insertNewObjectForEntityForName:@"Tag" inManagedObjectContext:managedObjectContext];
//TODO: populate tag object using tagDic
[project addTagsObject:tag];
}
如果沒有保存當前上下文,請記住在相同的上下文中進行提取;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.