我有一个带有数组控制器的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]];
我不确定如何继续解决此问题。我相信我的绑定是正确的,我认为我已经实现了键值编码的所有必要方法,但也许我没有,或者他们可能是错的。任何帮助,将不胜感激。