Z jakiegoś powodu wszystkie atrybuty maszynowe NSString są zwracane jako NSArrays w obiekcie mojego artykułu. Oto moja funkcja ich pobierania: Dane podstawowe zwracające NSArrays zamiast NSStrings
- (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;
}
Nie utworzyłem dla nich NSManagedObjectModel, a zamiast tego uzyskuję do nich dostęp za pomocą 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"];
Kiedy patrzę na to w okienku zmiennych, na path
i id
widzę (__NSArrayI *) ... Variable is not a CFString.
Drukowanie opis jednego z nich również wypisuje nawias używany podczas drukowania tablic.
Zastanawiam się, czy to może być deskryptor sortowania? Sprawdziłem dwukrotnie, czy dane wprowadzane do tych obiektów są poprawnie wpisane, a baza danych SQLite, której używam do tworzenia kopii zapasowych wszystkich elementów, wyświetla ciągi znaków.
Próbowałem ponownie zainstalować aplikację w symulatorze i zresetować go. Nadal dostaję NSArray zamiast NSString.
Naprawdę nie wiem, co się tutaj dzieje. Każda pomoc będzie doceniona.
EDYCJA: Właśnie znalazłem coś innego interesującego. Robię kolejną kontrolę, aby sprawdzić, czy artykuł został zapisany, i tym razem nie dostaję NSArray dla ścieżki artykułu:
- (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;
}
Teraz jestem naprawdę zdezorientowany. Którzy chętni?
Whoops! To literówka w pytaniu. Używam objectAtIndex. Naprawianie teraz. – MishieMoo
Tak, zastanawiałem się, jak to się skompilowało. – TechZen