2010-06-07 105 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;