Использование необъявленного идентификатора createWithNode

Прошу прощения за мое невежество, я новичок в программировании iOS :)

Я скачал проект с примерами от Sudzc — он создает код, поддерживающий подключение iOS к веб-сервисам на базе SOAP. Я интегрировал код в свой проект, и когда я запускаю проект, я получаю ошибку компиляции в одном из классов, созданных для обработки массивов длинных значений в веб-службе. Кто-нибудь может сказать мне, в чем проблема? Я в тупике.

Ошибка, которую я получаю,

IIDArrayOflong.m:20:26: Use of undeclared identifier 'createWithNode'

Вот код класса. Я отметил строку, выдающую ошибку....

@implementation IIDArrayOflong

+ (id) createWithNode: (CXMLNode*) node
{
    return [[[self alloc] initWithNode: node] autorelease];
}

- (id) initWithNode: (CXMLNode*) node
{
    if(self = [self init]) {
        for(CXMLElement* child in [node children])
        {
            //**ERROR THROWN ON THE NEXT LINE
            long long value = [[ createWithNode: child] object]; 
            [self addObject: value];
        }
    }
    return self;
}

+ (NSMutableString*) serialize: (NSArray*) array
{
    NSMutableString* s = [NSMutableString string];
    for(id item in array) {
        [s appendString: [NSString stringWithFormat: @"%lld", item]];
    }
    return s;
}
@end

Кроме того, смущен тем, почему объявление переменной

long long value = ...

Что это значит?

Заранее спасибо за помощь!


person Brian Ross    schedule 05.11.2014    source источник


Ответы (1)


Вы не предоставили объект для вызова селектора. Поскольку createWithNote: — это метод класса, вы должны вызывать его на своем class.

long long value = [[[self class] createWithNode: child] object]; 

long long value = эквивалентно int64_t value =. Он объявляет переменную с именем value, которая представляет собой 64-битное целое число.

person Ian MacDonald    schedule 05.11.2014
comment
Полезно отметить, что + перед объявлением метода обозначает его как метод класса, в отличие от - перед методами экземпляра. Внутри каждой пары фигурных скобок [] должен быть получатель и метод, поэтому методы класса [SomeClass methodName:parameter] и методы экземпляра [anInstance methodName:parameter] выглядят правильно. [ createWithNode: child] отсутствует получатель слева от имени метода. - person RobP; 05.11.2014
comment
Привет, @Ian MacDonald, у меня та же проблема - я понимаю ваше объяснение, 10x для него, но после установки исправления у меня возникла проблема. Неявное преобразование «long long» в «id» запрещено с ARC в следующей строке и предупреждение об одном и том же в той же строке. Я понимаю, что SUDZC пытается установить длинное значение в указатель и наоборот, но я не могу понять, как это исправить. Можете ли вы посоветовать мне? - person new2ios; 20.04.2015
comment
@new2ios: селектор -[IIDArrayOfLong object], используемый в этом вопросе, определен для возврата значения long long. Вам необходимо зафиксировать возвращаемое значение этого метода с соответствующим типом переменной для вашего использования. - person Ian MacDonald; 20.04.2015
comment
10x для быстрого повтора @Ian MacDonald. Я понимаю. Я заменил эти 2 строки на [self addObject: [[[self class] createWithNode: child] object]];. Я должен проверить, правильное ли это решение, когда доберусь до этой стадии, но пока я могу скомпилировать свой проект. 10x снова - person new2ios; 20.04.2015