UICollectionViewController中的已释放实例

时间:2014-04-27 10:55:15

标签: ios objective-c memory-management uicollectionview

我有一个名为SLCollectionViewModel的类,如果启动,将使用Core Data获取最新条目。到目前为止,初始视图没有问题。集合视图将正确显示可见条目(并在日志中显示它们)。

但是当我尝试滚动视图或尝试显式调用[self.collectionView reloadData]时会出现问题。错误日志是:

-[_PFArray retain]: message sent to deallocated instance 0x8de9ab0

我认为我的self.viewModel对象已在某处解除分配,但我无法确定我的方法有什么问题。这是我的- (void)viewDidLoad方法:

- (void)viewDidLoad
{
  [super viewDidLoad];

  self.viewModel = [SLCollectionViewModel new];

  [self.collectionView reloadData];

}

这是我的SLCollectionViewModel课程:

- (instancetype) init {

  self = [super init];
  if(!self) return nil;

  _managedObjectContext = [[SLCoreDataStack defaultStack] managedObjectContext];

  NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
  NSEntityDescription *entity = [NSEntityDescription
                                      entityForName:@"SLPost"
                                      inManagedObjectContext:_managedObjectContext];

  [fetchRequest setEntity:entity];
  // The _posts in an NSArray that saves all my NSManageObject
  // which will be used to populate the collection view.
  _posts = [_managedObjectContext executeFetchRequest:fetchRequest
                                                error:nil];

  return self;
}

1 个答案:

答案 0 :(得分:0)

我意识到由于没有正确创建属性,这是我自己的错误。在我的SLCollectionViewModel中,@property的{​​{1}}应使用NSArray *posts而不是retain

在: assign

后:

@property (nonatomic, assign) NSArray *posts;