Ios UICollectionViewController中解除分配的实例

Ios UICollectionViewController中解除分配的实例,ios,objective-c,memory-management,uicollectionview,Ios,Objective C,Memory Management,Uicollectionview,我有一个名为SLCollectionViewModel的类,如果启动该类,它将获取包含核心数据的最新条目。到目前为止,初始视图没有问题。集合视图将正确显示可见条目,并在日志中显示它们 但是当我尝试滚动视图,或者尝试显式调用[self.collectionView reloadData]时,就会出现问题。错误日志为: -[\u PFArray retain]:发送到解除分配实例0x8de9ab0的消息 我认为我的self.viewModel对象被释放到了某个地方,但我无法指出我的方法有什么问题。以

我有一个名为SLCollectionViewModel的类,如果启动该类,它将获取包含核心数据的最新条目。到目前为止,初始视图没有问题。集合视图将正确显示可见条目,并在日志中显示它们

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

-[\u PFArray retain]:发送到解除分配实例0x8de9ab0的消息

我认为我的self.viewModel对象被释放到了某个地方,但我无法指出我的方法有什么问题。以下是我的-voidviewDidLoad方法:

下面是我的SLCollectionViewModel类:


我意识到这是我自己的错误,没有正确地创建该属性。在我的SLCollectionViewModel中,NSArray*posts的@property应该使用retain而不是assign

之前: @属性非原子,分配NSArray*职位

之后:


@非原子性质,保留NSArray*岗位

self.viewModel的@property是如何声明的?它是@property非原子的,强SLCollectionViewModel*viewModel;当程序停止并激活调试器时,指向它所说的已解除分配的内存地址的输出是什么?i、 e.根据您的原始问题po 0x8de9ab0。此外,出于兴趣,崩溃是否一致,每次都有相同的错误消息?崩溃是一致的,有相同的错误,但地址不同。po 0x90c0000的输出为-[\u PFArray respondsToSelector:]:发送到解除分配实例0x90c0000 151781376的消息打开,然后用结果更新您的答案
- (void)viewDidLoad
{
  [super viewDidLoad];

  self.viewModel = [SLCollectionViewModel new];

  [self.collectionView reloadData];

}
- (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;
}