2010-06-07 109 views
0
favorites = [[NSMutableArray alloc] init]; 

for (int i=0; i<9; i++) { 

    [favorites addObject:[[[Favorite alloc] constructUnknown] autorelease]]; 



} 

我得到:目標C填充陣列

終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,原因:「*** - [收藏尺寸]:無法識別的選擇發送例如0x380d9c0'

爲什麼?

收藏是我的自定義類,收藏含我的自定義類的實例9陣列

編輯:

Favorite.h:

-(Favorite*)constructUnknown; 

Favorite.m:

- (Favorite*)constructUnknown{ 


self=[super init]; 

if (self) { 
    image=[UIImage imageNamed:@"unknown.png"]; 
} 

return self; 

} 

COMPLETE FAVORITES.h

@interface Favorite : NSObject { 

NSString *identity; 
bool ready; 

UIImage *image; 
NSURL *telephone; 


} 

@property (nonatomic,retain) UIImage *image; 
@property (nonatomic,retain) NSURL *telephone; 
@property (nonatomic,retain) NSString *identity; 

//passare unknown al nome per costrutire un oggetto unknown. 
-(Favorite*)constructWithID:(NSString*)name withPhoto:(UIImage*)photo andNumber:(NSString*)number; 

-(Favorite*)constructUnknown; 
-(NSURL*) convertToUrl:(NSString*)phone; 
- (UIImage*) getImage; 

@end 
+0

如何定義'-constructUnknown'? – kennytm 2010-06-07 15:03:38

+0

我已經在單個指針上測試了構造函數:它的工作原理 – 2010-06-07 15:07:55

+0

向我們展示Favorite.h?我很好奇你是否正確地分類了NSObject。 – 2010-06-07 15:13:18

回答

2

例外可能是因爲您的image未被保留。嘗試

image = [[UIImage imageNamed:@"unknown.png"] retain]; 

BTW,初始化應該被命名爲-initXXX按照慣例返回id。例如

-(id)initWithUnknown{ ... } 
+0

按照所有權準則,不需要保留'UIImage',因爲類方法'imageNamed:'返回一個自動釋放對象。 雖然初始化程序命名的好點。 – 2010-06-07 17:04:41

+0

@jshier:如果對象是autoreleased,並且你想保留它,那麼你*需要*保留它。 – mipadi 2010-06-07 17:17:59

+0

啊,真的。我的錯。確實看起來這將是問題。 – 2010-06-07 17:29:13

0

萬一有人讀這一點,仍然沒有找到解決辦法,我的問題是我聲明的對象爲有一點不同:

@class LoginViewController; 

@interface LoginViewDelegate : NSObject <UIApplicationDelegate> { 

} 

.... 

@property (nonatomic, retain) AppConfiguration *CurrentAppConfig; 

.... 

@End 

當我在呼喚它:

[[self.CurrentAppConfig alloc] init]; 

我得到了同樣的錯誤,我不得不做的是使用合成關鍵字:

@implementation LoginViewDelegate 

.... 

@synthesize CurrentAppConfig;