персистентный '<class>' может не отвечать на метод + - PullRequest
0 голосов
/ 09 июня 2010

Я нашел кучу постов по этой проблеме и на самом деле мне удалось удалить одно из предупреждений, которые я получал от них, однако одно не исчезло.

Некоторый контекст: я создаю конвертер валют какупражнение в обучении Цель C

Класс My Rate представляет собой курс, в который валюта может быть конвертирована, или выглядит следующим образом:

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

Курс.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

Здесь, в ExchangeRates, содержится одно предупреждение класса, содержащего матрицу ставок:

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

На линии:

Rate *rate = [Rate initWithCode...

Предупреждение:

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

Как я понимаю, обычно это происходит из-за того, что метод не объявлен в заголовке или заголовок не импортирован, но, как вы можете видеть, я сделалкак.

1 Ответ

4 голосов
/ 09 июня 2010

Вы должны инициализировать экземпляр ObjC как

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