NSTableView和NSMutableArray之间的Cocoa绑定拒绝更新

时间:2010-06-26 16:07:18

标签: objective-c cocoa cocoa-bindings

好吧,我对Obj-C和Cocoa很新,但我确信我的绑定是正确的。我一直在谷歌搜索,搜索堆栈溢出并一次又一次检查我的值。

所以,这是我的绑定:

他们连接到这个班级:

@interface TMMaddMangaWindowDelegate : NSWindowController {
...
}
...
@property (copy) NSMutableArray* mangaList;
...
@end



@implementation TMMaddMangaWindowDelegate
...
@synthesize mangaList;
// - (NSMutableArray*) mangaList {
//   NSLog(@"mangaList was called!");
//   return mangaList;
//}
//- (void) setMangaList:(NSMutableArray *) input{
//  NSLog(@"setMangaList was called!");
//  [mangaList autorelease];
//  mangaList = [input retain];
//}
...
-(void) populateList:(NSArray*)list{
    NSMutableArray* newArray = [[NSMutableArray alloc] initWithArray:list];
    NSLog(@"Populating List.");
    for(NSXMLNode* node in list){
        [newArray addObject:node.description];
        //[[self mutableArrayValueForKey:@"mangaList"] addObject:node.description];
            //NSLog(@"%@", node.description);
    }
    [self setMangaList:newArray];
    [[self chapterListDownloadIndicator] stopAnimation:self];
}

正如您所看到的,我也尝试了mutableArrayValueForKey方法,但没有产生任何结果。我知道一个事实,mangaList正在获得物品。

我已经做了一段时间了,可能犯了一个愚蠢的错误。

提前致谢。

2 个答案:

答案 0 :(得分:3)

看起来你正在改变数组控制器后面的mangaList。每当您对mangaList进行更改时,您应该先完成[self willChangeValueForKey:@"mangaList"];,然后在完成更改后再调用[self didChangeValueForKey:@"mangaList"];。这将让阵列控制器知道它需要看看发生了什么变化。

答案 1 :(得分:0)

事实证明,问题是窗口没有将文件所有者的类标识设置为我的窗口控制器/委托。在我设定这一刻的那一刻,窗户栩栩如生。

这个问题也阻止了我的NSProgressIndicator工作。