Либо я не понимаю, что означает термин «uniquing» в Core Data, либо я неправильно получаю данные. У меня довольно простая модель данных. Три объекта: Сообщество, Активы и Категория. Каждое Сообщество имеет отношение к нескольким категориям. Каждая категория имеет отношение к нескольким активам. Каждый создаваемый актив должен иметь одну и только одну категорию.iPhone SDK: Основные данные и уникальность?
В коде, который я опубликовал, я хотел бы вывести все категории, которые имеет конкретное сообщество в консоли. Я думал, что из-за уникальных возможностей Core Data может существовать только одна категория с одним именем (имя является единственным атрибутом для категории). Однако, когда я печатаю на консоли, я получаю дубликаты имен категорий.
// Fetch Community instances in the database, and add them to an NSMutableArray
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *community = [NSEntityDescription entityForName:@"Community" inManagedObjectContext:managedObjectContext];
[request setEntity:community];
// Only return the community instances that have the cityName of the cell tapped in the CommunitiesNonEditableTableViewController
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(cityName like %@)", cellCityName];
[request setPredicate:predicate];
NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil) {
// Handle the error.
}
// Set communitiesArray with mutableFetchResults
[self setCommunitiesArray:mutableFetchResults];
[mutableFetchResults release];
[request release];
// Creates a community instance using the community stored in the array at index 0. This is the only community in the array.
Community *communityInstance;
communityInstance = [communitiesArray objectAtIndex:0];
// Retrieves existing categories of assets in the community, and adds them to an NSSet
NSSet *communityCategoriesSet = communityInstance.categories;
// Converts NSSet to an NSArray with each category as an index
NSArray *communityCategoriesArray = [communityCategoriesSet allObjects];
// For loop that iterates through the array full of categories, retrieves the names of each category, and adds it to an NSMutableArray
categoryNames = [[NSMutableArray alloc] init];
int i;
for (i = 0; i < [communityCategoriesArray count]; i++) {
Category *categoryInstance;
categoryInstance = [communityCategoriesArray objectAtIndex:i];
[categoryNames addObject:categoryInstance.name];
}
// Prints array full of category names to console
NSLog(@"%@", categoryNames);
Когда я выполняю это, я получаю дубликаты имен в консоли. Зачем?
Это еще что-то изменило. Где люди получают это? – TechZen
Что касается mutableCopy, это необходимо, потому что я использую NSMutableArray для результатов выборки. Я думаю, мне не нужно, чтобы он был изменчив, хотя ... –