2011-11-13 52 views
-1

的XCode錯誤:無法從對象創建的NSArray

GNU gdb 6.3.50-20050815 (Apple version gdb-1708) (Mon Aug 8 20:32:45 UTC 2011) 
Copyright 2004 Free Software Foundation, Inc. 
GDB is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 
Type "show copying" to see the conditions. 
There is absolutely no warranty for GDB. Type "show warranty" for details. 
This GDB was configured as "x86_64-apple-darwin".tty /dev/ttys000 
[Switching to process 2530 thread 0x0] 
2011-11-12 18:29:29.857 RaiseMan[2530:707] Cannot create NSArray from object <Document: 0x100539a00> of class Document 
2011-11-12 18:29:29.879 RaiseMan[2530:707] Cannot create NSArray from object <Document: 0x10015dda0> of class Document 
2011-11-12 18:30:10.362 RaiseMan[2530:707] Cannot create NSArray from object <Document: 0x1001b0a90> of class Document 

person.h:

#import <Foundation/Foundation.h> 

@interface Person : NSObject 
{ 
    NSString *personName; 
    float expectedRaise; 
} 

@property (readwrite, copy) NSString *personName; 
@property (readwrite) float expectedRaise; 

@end 

person.m:

#import "Person.h" 

@implementation Person 

- (id) init 
{ 
    self = [super init]; 
    expectedRaise = 5.0; 
    personName = @"New Person"; 
    return self;  
} 

- (void)dealloc 
{ 
    [personName release]; 
    [super dealloc]; 
} 

@synthesize personName; 
@synthesize expectedRaise; 

@end 

document.h:

#import <Cocoa/Cocoa.h> 

@interface Document : NSDocument 
{ 
    NSMutableArray *employees; 
} 

- (void)setEmployees:(NSMutableArray *)a; 

@end 

document.m

#import "Document.h" 

@implementation Document 

- (id)init 
{ 
    self = [super init]; 
    //if (self) { 
     employees = [[NSMutableArray alloc] init]; 
    //} 
    return self; 
} 

- (void)dealloc 
{ 
    [self setEmployees:nil]; 
    [super dealloc]; 
} 


-(void)setEmployees:(NSMutableArray *)a 
{ 
    //this is an unusual setter method we are goign to ad a lot of smarts in the next chapter 
    if (a == employees) 
     return; 
    [a retain]; 
    [employees release]; 
    employees = a; 
} 

- (NSString *)windowNibName 
{ 
    // Override returning the nib file name of the document 
    // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. 
    return @"Document"; 
} 

- (void)windowControllerDidLoadNib:(NSWindowController *)aController 
{ 
    [super windowControllerDidLoadNib:aController]; 
    // Add any code here that needs to be executed once the windowController has loaded the document's window. 
} 

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError 
{ 
    /* 
    Insert code here to write your document to data of the specified type. If outError != NULL, ensure that you create and set an appropriate error when returning nil. 
    You can also choose to override -fileWrapperOfType:error:, -writeToURL:ofType:error:, or -writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead. 
    */ 
    NSException *exception = [NSException exceptionWithName:@"UnimplementedMethod" reason:[NSString stringWithFormat:@"%@ is unimplemented", NSStringFromSelector(_cmd)] userInfo:nil]; 
    @throw exception; 
    return nil; 
} 

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError 
{ 
    /* 
    Insert code here to read your document from the given data of the specified type. If outError != NULL, ensure that you create and set an appropriate error when returning NO. 
    You can also choose to override -readFromFileWrapper:ofType:error: or -readFromURL:ofType:error: instead. 
    If you override either of these, you should also override -isEntireFileLoaded to return NO if the contents are lazily loaded. 
    */ 
    NSException *exception = [NSException exceptionWithName:@"UnimplementedMethod" reason:[NSString stringWithFormat:@"%@ is unimplemented", NSStringFromSelector(_cmd)] userInfo:nil]; 
    @throw exception; 
    return YES; 
} 

+ (BOOL)autosavesInPlace 
{ 
    return YES; 
} 

@end 

完整的項目代碼:http://sharesend.com/zyca7

+0

爲什麼你沒有在錯誤消息中包含模塊(或相關行),並期望人們下載zip文件? –

+0

不確定你的意思?我在上面列出了完整的錯誤,並在文章中列出了完整的代碼?我包括了整個項目,因爲有很多綁定等,因爲這是一個嘖嘖,我正在學習可可,我不知道我可能做錯了什麼。 – ian

回答

0

無需下載從ShareSend zip文件(請使用更好的主機,如Dropbox的,或者更好的是,某種形式的版本控制的),我只能猜測您已將數組控制器的contentArray綁定到文檔,但未能指定該文檔的數組屬性。

告訴數組控制器使用文檔本身作爲其內容數組將不起作用,因爲文檔不是數組。進入你的筆尖,選擇陣列控制器,編輯contentArray綁定,然後爲要綁定它的數組屬性指定模型鍵路徑。

+0

謝謝。現在運行,但按鈕會使它崩潰。到達那裏... – ian

2

今天遇到同樣的問題,我已經解決了。 您應該將列而不是單元綁定到數組控制器。