2010-06-09 10 views
0

J'ai trouvé un tas de messages sur ce problème et j'ai réussi à supprimer l'un des avertissements que je recevais de ceux-ci mais l'un persiste.persistant '<class>' peut ne pas répondre à la méthode +

Certains contexte: Je crée convertisseur de devises comme un exercice d'apprentissage Objectif C

Ma classe de taux représente un taux qu'une monnaie peut être convertie ou de ressemble à ceci:

Rate.h

// 
// Rate.h 
// Currency Converter 
// 
// Created by Matthew Spence on 08/06/2010. 
// Copyright 2010 __MyCompanyName__. All rights reserved. 
// 

#import <Cocoa/Cocoa.h> 


@interface Rate : NSObject { 
NSString* code; 
NSString* description; 
float rate; 
} 
- (id)init; 
- (id)initTest; 
- (id)initWithCode:(NSString*)code description:(NSString*)description rate:(float)rate; 
@property(retain) NSString* code; 
@property(retain) NSString* description; 
@property(readwrite) float rate; 
@end 

Rate.m

// 
// Rate.m 
// Currency Converter 
// 
// Created by Matthew Spence on 08/06/2010. 
// Copyright 2010 __MyCompanyName__. All rights reserved. 
// 

#import "Rate.h" 


@implementation Rate 
@synthesize code; 
@synthesize description; 
@synthesize rate; 
- (id)init { 
return self; 
} 

- (id)initTest { 
return self; 
} 

- (id)initWithCode:(NSString*)codeA description:(NSString*)descriptionA rate:(float)rateA { 
self.code = codeA; 
self.description = descriptionA; 
self.rate = rateA; 
[self init]; 
return self; 
} 
@end 

L'avertissement se produit ici dans ExchangeRates une classe singleton qui contient une matrice de taux:

ExchangeRates.m

// 
// ExchangeRates.m 
// Currency Converter 
// 
// Created by Matthew Spence on 02/06/2010. 
// Copyright 2010 __MyCompanyName__. All rights reserved. 
// 

#import "ExchangeRates.h" 
#import "SynthesizeSingleton.h" 
#import "Rate.h" 
#import "NSString+CVS.h" 


@implementation ExchangeRates 
@synthesize matrix; 
synthesize_singleton(ExchangeRates); 
- (id)init { 

self = [super init]; 
self.matrix = [NSMapTable init]; 
    if (self) { 
    NSError *error = nil; 
    NSString *matrixString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://rss.timegenie.com/forex.txt"] encoding:NSUTF8StringEncoding error:&error]; 
    NSArray *matrixArray = [matrixString csvRows]; 
    for(NSArray *rateArray in matrixArray) { 
     Rate *rate = [Rate initWithCode:[rateArray objectAtIndex:0] description:[rateArray objectAtIndex:1] rate:[rateArray objectAtIndex:2]]; 
     [self.matrix setObject:rate forKey:[rateArray objectAtIndex:0]] ; 
     NSLog(@"my ns string = %@", [rateArray objectAtIndex:0]); 
    } 
    } 

    return self; 
} 
@end 

Sur la ligne:

Rate *rate = [Rate initWithCode... 

Avertissement:

'Rate' may not respond to '+initWithCode:description:rate:' 

Comme Je comprends que c'est normalement dû au fait que la méthode n'est pas déclarée dans l'en-tête ou que l'en-tête n'est pas importé, mais Comme vous pouvez le voir, j'ai fait les deux.

Répondre

4

Vous devez initialiser une instance ObjC comme

Rate* rate = [[Rate alloc] initWithCode:...]; 
//     ^^^^^ 
+0

ne devrait pas être asterix sur la variable non la déclaration? (venant de l'arrière-plan de php et toujours obtenir la tête ronde idée de pointeurs) – msaspence

+0

@user: Ce n'est pas grave. – kennytm