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

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

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



} 

je reçois:tableau de remplissage C avec des pointeurs de classe personnalisée

Mettre fin application en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: « *** - [Favorite Taille]: sélecteur non reconnu envoyé à l'instance 0x380d9c0 '

pourquoi?

favori est ma classe personnalisée, favoris un tableau contenant 9 cas de ma classe personnalisée

modifier:

Favorite.h:

-(Favorite*)constructUnknown; 

Favorite.m:

- (Favorite*)constructUnknown{ 


self=[super init]; 

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

return self; 

} 

FAVORIS COMPLETS.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

Comment définir '-constructUnknown'? – kennytm

+0

J'ai testé le constructeur sur un seul pointeur: ça marche –

+0

Montrez-nous Favorite.h? Je suis curieux de savoir si vous avez correctement sous-classé NSObject. –

Répondre

2

L'exception est probable car votre image n'est pas conservée. Essayez

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

BTW, initializers devrait être nommé comme -initXXX et le retour d'une id par convention. par exemple.

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

Il n'est pas nécessaire de conserver le 'UIImage', car la méthode de classe' imageNamed: 'renvoie un objet autoreleased, conformément aux consignes de propriété. Bon point sur le nom de l'initialiseur cependant. –

+0

@jshier: Si l'objet est auto-libéré et que vous voulez le conserver, vous devez * le * le conserver. – mipadi

+0

Ah, c'est vrai. Ma faute. Effectivement semble que ce serait le problème. –

0

Juste au cas où quelqu'un lit cela et ne toujours pas parvenir à une solution, mon problème était un peu différent, je déclarai l'objet comme:

@class LoginViewController; 

@interface LoginViewDelegate : NSObject <UIApplicationDelegate> { 

} 

.... 

@property (nonatomic, retain) AppConfiguration *CurrentAppConfig; 

.... 

@End 

Et quand je l'appeler:

[[self.CurrentAppConfig alloc] init]; 

Je recevais la même erreur, tout ce que je devais faire était d'utiliser le mot-clé synthétisent:

@implementation LoginViewDelegate 

.... 

@synthesize CurrentAppConfig; 
Questions connexes