Próbuję trochę wyczyścić kod i wpadłem na pomysł, aby utworzyć małą klasę pomocniczą do zapisywania i pobierania danych z podstawowych danych.
Wykonuję NSFechtRequest z poziomu klasy pomocniczej w następujący sposób:
- (NSArray *)fetchDataOutOfDBWithEntity:(NSString *)description
{
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"HealthData" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *results = [context executeFetchRequest:fetchRequest error:&error];
return results;
}
To po prostu zwraca NSArray
tak jak powinno być, jeśli używasz executeFetchRequest:error:
Wołam tę funkcję z UICollectionsViewController viewDidLoad
metoda taka jak ta:
- (void)viewDidLoad {
[super viewDidLoad];
DatabaseHelper *helper = [[DatabaseHelper alloc] init];
NSArray *array = [helper fetchDataOutOfDBWithEntity:@"HealthData"];
dataInHealth = [[[NSArray alloc] initWithArray:array];
}
Dziwne jest teraz to, że dataInHealth zawiera informacje. Mogę je wydrukować i zobaczyć plik NSManagedObjects
(przez punkty przerwania) w tablicy wróciłem, alekiedy chcę wstawić informacje do collectionView, po prostu nic nie robi lub rzuca jakieś szalone wyjątki (w zależności od tego, co robię).
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
KalenderCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
HealthData *object = [dataInHealth objectAtIndex:indexPath.row];
cell.stepCount.text = object.stepCount;
return cell;
}
object.stepCount
jest po prostu zero i wszystkie inne właściwości, które mamZostań taki jaki jesteś. Dlaczego nie mogę uzyskać dostępu do moich właściwości. Kiedy nie przypadkiem nic poza pobieraniem z poziomu viewDidLoad zamiast klasy pomocniczej, wszystko działa od razu po wyjęciu z pudełka.
W tym NSArray są dane. Dlaczego nie mam do niego dostępu?
Odpowiedzi:
1 dla odpowiedzi № 1Spróbuj przekształcić obiekt DatabaseHelper w plikmyślę, że kontekst obiektu zarządzanego jest zwalniany, gdy viewDidLoad kończy wykonywanie, zwalniając również wszystkie pobrane przez niego obiekty ManagedObject.