添加对象时NSCollectionView不会更新

时间:2015-03-06 17:23:45

标签: cocoa key-value-coding nscollectionview

我有一个带有数组控制器的NSCollectionView,它在添加它们并重新启动应用程序后成功显示对象,但是在添加时立即成功显示。

我有一个控制器类,它是NSObject的子类,它将数据从plist读取到NSMutableArray中,该NSMutableArray绑定到一个Array Controller,后者又绑定到我的NSCollectionView。我相信我的绑定是正确的,就像我添加一个对象一样,在我重新启动应用程序后,一切都显示正常,包括新对象和所有绑定属性。但是当我添加一个对象时,它不会立即被添加。应用程序需要重新启动。我相信,由于我的绑定似乎是正确的,这是我的控制器类不符合键值的问题。

根据"键值编码访问器方法"我已经实现了我认为应该拥有的所有方法。键值编码编程指南的一部分。我相信我已经在[To-Many Properties的Collection Accessor Patterns] [1]部分中实现了每个必需的访问器。此外,在我已经完成的[快速开始收集视图] [2]中,它指出甚至不需要实现所有这些方法(我已经确认)。

以下是一些代码示例,以便更好地解释我在做什么。

我的收藏课," MYCollection":

#import <Foundation/Foundation.h>
#import "MyObject.h"

@interface MYCollection : NSObject
@property (retain, readwrite) NSMutableArray* objects;
- (void)insertObject:(MYObject *)object inObjectsAtIndex:(NSUInteger)index;
@end

#import "MYObjectCollection.h"
#import "MYObject.h"

@implementation MYObjectCollection

@synthesize objects = _objects;

- (id)init {

  self = [super init]; 
  if (self) {
    _objects = [self objects];
  }

  return self;
}

- (NSArray*)objects {

  // here I retrieve the objects from the plist into a mutable array
  // let's call that array "sortedArray"

  return sortedArray;
}

- (void)setObjects:(NSMutableArray *)objectsArray {

  // here I write the object array to a plist

  _objects = objectsArray;
}

-(void)insertObject:(MYObject*)object inObjectsAtIndex:(NSUInteger)index {

  [_objects insertObject:object atIndex:index];
  [self setObjects:_objects];
  return;
}

-(void)addObjectsObject:(MYObject*)object {

  [_objects addObject:object];
  [self setObjects:_objects];
  return;
}

-(void)removeObjectFromObjectsAtIndex:(NSUInteger)index {

  [_objects removeObjectAtIndex:index];
  [self setObjects:_objects];
  return;
}

-(void)removeObjectsObject:(MYObject*)object {

  [_objects removeObject:object];
  [self setObjects:_objects];
  return;
}

-(id)objectInObjectsAtIndex:(NSUInteger)index {

  return [_objects objectAtIndex:index];
}

-(NSUInteger)countOfObjects {

  return [_objects count];
}

- (NSEnumerator *)enumeratorOfObjects {

  return [_objects objectEnumerator];
}

@end

我通过外部视图在其他地方向该控制器添加对象:

MYObjectCollection *collection = [[MYObjectCollection alloc] init];
[collection insertObject:new inObjectsAtIndex:[collection.objects count]];

我不确定如何继续解决此问题。我相信我的绑定是正确的,我认为我已经实现了键值编码的所有必要方法,但也许我没有,或者他们可能是错的。任何帮助,将不胜感激。

0 个答案:

没有答案