2010-06-27 8 views
1

Dans mon application, j'ai un nsmutablearray qui stocke un certain nombre de types d'objets. Tous ces objets ont deux propriétés similaires: id, type. Ce que je fais est d'aller chercher l'objet de travail actuel dans un tableau à 1 élément et d'accéder à ses propriétés id, tapez à partir d'une autre classe. Cette classe ne sait pas quel type d'objet est l'objet actuel. Comment dois-je accéder à cet objet?Accéder aux propriétés de l'objet dans un iphone nsmutablearray sdk

J'ai essayé de faire:

commentId = [[appDelegate.currentDeailedObject valueForKey:@"id"] intValue]; 
commentType = [appDelegate.currentDeailedObject valueForKey:@"type"]; 

Mais cela n'a pas fonctionné.

J'ai créé un objet de type id comme ceci:

id *anObject = [appDelegate.currentDeailedObject objectAtIndex:0]; 
commentId = [[anObject valueForKey:@"id"] intValue]; 
commentType = [anObject valueForKey:@"type"]; 

Mais il me montre 2 avertissements: 1.warning: initialisation du type pointeur incompatible

2.warning: type de récepteur non valide ' id * '

Comment dois-je faire ce travail?

Merci d'avance.

Répondre

0

Les variables génériques id ne prennent généralement pas de pointeur, car il s'agit déjà d'un pointeur. Vous devez donc utiliser quelque chose comme:

id anObject = [appDelegate.currentDeailedObject objectAtIndex:0]; 

Vous pouvez utiliser des moulages pour commentId et commentType, par exemple (NSNumber *), etc.

+0

Thanx Alex .. je l'ai fait la même chose et juste travaillé .. – neha

1

Correction pour votre code:

id anObject = [appDelegate.currentDeailedObject objectAtIndex:0]; 
int commentId = [anObject id]; 
NSString *commentType = [anObject type]; 

avis disparus "*" après "id" (id représente déjà une référence) et les disparus "valueForKey" (ce qui est une méthode à l'intérieur NSDictionary renvoie une valeur représentée par la clé fournie).

En général, ce code devrait fonctionner,
Mais je vous suggère de créer une superclasse ou d'un protocole qui aura les 2 méthodes que vous avez besoin (par exemple « id » et « type »).

Par exemple (superclasse):

@interface MyComment : NSObject 
{ 
    NSInteger commentId; 
    NSString *_commentType; 
} 

@property (nonatomic) NSInteger commentId; 
@property (nonatomic, copy) NSString *commentType; 

@end 

@implementation MyComment 

@synthesize commentId, commentType = _commentType; 

- (void)dealloc { 
    [_commentType release]; 

    [super dealloc]; 
} 

@end 

// sample use 
@interface MyCommentNumberOne : MyComment 
{ 
} 
@end 

Un autre exemple (protocole):

@protocol CommentPropertiesProtocol 
@required 
- (NSInteger)commentId; 
- (NSString *)commentType; 
@end 

// sample use 
@interface MyCommentNumberOne : NSObject <CommentPropertiesProtocol> 
{ 
    NSInteger commentId; 
    NSString *_commentType; 
} 
@end 

@implementation MyCommentNumberOne 

- (NSInteger)commentId { 
    return commentId; 
} 
- (NSString *)commentType { 
    return _commentType; 
} 

- (void)dealloc { 
    [_commentType release]; 

    [super dealloc]; 
} 

@end 
+0

Merci pour la réponse détaillée. Il a été résolu par la première méthode. – neha

Questions connexes