我试图稍微清理我的代码,并且我已经有了创建一个小帮助程序类来保存和从核心数据中获取数据的想法。
我在辅助类中执行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;
}
如果您使用NSArray
executeFetchRequest:error:
我用这样的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而不是帮助程序类中取出之外什么都没有办法,所有东西都是开箱即用的。
NSArray中有数据。为什么我无法访问它?
答案 0 :(得分:1)
尝试将DatabaseHelper对象变为属性,我认为当viewDidLoad结束执行时,你的托管对象上下文正在被释放,同时释放你通过它获取的所有ManagedObjects。