我正在尝试清理我的代码,我已经有了创建一个小助手类来保存和从核心数据中获取数据的想法。
我在助手类中执行NSFechtRequest,如下所示:
- (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;
}
如果您使用executeFetchRequest:error:
,这只会返回一个NSArray
我从UICollectionsViewController的viewDidLoad
方法中调用这个函数,如下所示:
- (void)viewDidLoad {
[super viewDidLoad];
DatabaseHelper *helper = [[DatabaseHelper alloc] init];
NSArray *array = [helper fetchDataOutOfDBWithEntity:@"HealthData"];
dataInHealth = [[[NSArray alloc] initWithArray:array];
}
现在奇怪的是dataInHealth包含信息。我可以把它们打印出来,我可以在我返回的数组中看到NSManagedObjects
(通过断点),但当我想把信息插入collectionView时,它什么都不做,或者抛出一些疯狂的异常(取决于我在做什么)。
- (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
只是零,而我拥有的所有其他属性都保持不变。为什么我不能访问我的房产。当我除了从viewDidLoad而不是helper类中获取之外什么都没有的时候,一切都会开箱即用。
NSArray里有数据。为什么我不能访问它?
尝试将DatabaseHelper对象制作成一个属性,我认为当viewDidLoad结束执行时,您的托管对象上下文将被释放,同时释放您通过它获取的所有托管对象。