По какой-то причине все типизированные атрибуты NSString возвращаются как NSArrays в моем объекте Article. Вот моя функция для их извлечения:
- (NSArray *)getSavedArticles
{
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
NSError *error = nil;
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Article" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
NSSortDescriptor *dateSort = [NSSortDescriptor sortDescriptorWithKey:@"last_opened" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:dateSort]];
NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
return fetchedObjects;
}
Я не создал NSManagedObjectModel для них, и вместо этого я просто получаю к ним доступ, используя KVO.
//self.data has the array returned from getSavedArticles
NSManagedObject *object = [self.data objectAtIndex:indexPath.row];
NSString *path = [object valueForKey:@"path"];
NSString* id = [object valueForKey:@"id"];
Когда я смотрю на это в области переменных, на path
и id
вижу (__NSArrayI *) ... Variable is not a CFString.
Печать описания любого из них также выводит скобки, используемые при печати массивов.
Мне просто интересно, может ли это быть из-за дескриптора сортировки? Я дважды проверил, правильно ли введены данные, поступающие в эти объекты, и база данных SQLite, которую я использую для резервного копирования всего, отображает строки.
Я попытался переустановить приложение в симуляторе и выполнить его сброс. Я все еще получаю NSArray вместо NSString.
Я действительно не знаю, что здесь происходит. Любая помощь будет оценена.
РЕДАКТИРОВАТЬ: Я просто нашел что-то еще интересное. Я делаю еще одну проверку, чтобы увидеть, была ли статья сохранена, и на этот раз я не получаю NSArray для пути к статье:
- (NSString *)hasArticleSaved:(NSString *)id
{
NSString *path = nil;
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"%K == %@", @"id", id]];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Article" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
NSError *error = nil;
NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects.count > 0) {
NSManagedObject *savedArticle = [fetchedObjects objectAtIndex:0];
path = [savedArticle valueForKey:@"path"];
}
return path;
}
Теперь я действительно запутался. Любой берущий?