2010-06-25 64 views
0

我想攔截一個NSArrayController(thingsController)addObject方法與以下訪問器方法。爲什麼NSArrayController不通過綁定調用訪問器方法?

- (void)insertObject:(Thing *)thing 
inThingsAtIndex:(NSUInteger)index; 

我有兩個類:Thing和MyDocument。事物有一個屬性:名稱。 MyDocument有一個名爲things的NSMutableArray和一個名爲thingsController的NSArrayController。在NIB中,文件的所有者被設置爲MyDocument,並且我將NSArrayController的內容數組綁定到文件所有者,並將模型路徑設置爲事物。 NSArrayController也有模式設置爲類,類名設置爲Thing,它有一個名爲name的鍵。在MyDocument中,我有一個名爲createThing的方法,它首先發送thingsController newObject,然後發送addObject。如果我在Thing的init方法中設置斷點,則在thingsController發送newObject時會調用它。但是,當thingsController發送addObject時,我的訪問器方法insertObject:(Thing *)在ThingsAtIndex:(NSUInteger)索引中沒有調用。

我已閱讀蘋果公司關於鍵值編碼訪問器方法的文檔,我認爲我很合規,但是我必須缺少一些東西。

任何幫助將不勝感激。下面

代碼...

Thing.h

#import <Cocoa/Cocoa.h> 


@interface Thing : NSObject { 
NSString *name; 

} 
@property (readwrite, copy) NSString *name; 

@end 

Thing.m

#import "Thing.h" 


@implementation Thing 

@synthesize name; 

-(id) init 
{ 
[super init]; 

name = @"Default"; 

return self; 
} 

@end 

MyDocument.h

#import <Cocoa/Cocoa.h> 
@class Thing; 

@interface MyDocument : NSDocument 
{ 
NSMutableArray *things; 
IBOutlet NSArrayController *thingsController; 
IBOutlet NSTableView *tableView; 
} 


- (IBAction)createThing:(id)sender; 

- (void)insertObject:(Thing *)thing 
inThingsAtIndex:(NSUInteger)index; 

- (void)removeObjectFromThingsAtIndex:(NSUInteger)idx; 


@end 

MyDocument.m

- (IBAction)createThing:(id)sender 
{ 
//Create the object 
Thing *t = [thingsController newObject]; 

//Add it to the content array of 'thingsController' 
[thingsController addObject:t]; 

NSLog(@"The new content of array is%@",things); 

[t release]; 
} 

回答

1

道歉。我做了一個改變,現在它工作。我想我已經在過去嘗試這樣做,它沒有工作......

我加

@property (readwrite, copy) NSMutableArray *things; 

到MyDocument.h

@synthesize things; 

到MyDocument.m 。

似乎工作。

問候。

相關問題