2014-09-04 2 views
-1

Я новичок в Objective C и прошивкуObjective C/IOS - Свойство не найден на объекте типа

Я пытаюсь получить простой метод работает, но я получаю проблему.

декларации и реализации:

WebServiceCall.h

- (void) setwebServiceUrlStr: (NSMutableString *) newUrl; 

WebServiceCall.m

- (void) setwebServiceUrlStr: (NSMutableString *) newUrl 
{ 
    webServiceUrlStr = newUrl; 
    NSLog(@"Setting webServiceUrlStr = %@",webServiceUrlStr); 
} 

В то в WebServiceCall.m я пытаюсь сделать это:

NSString *sUrl = [defaults objectForKey:@"sUrl"]; 
[self.setwebServiceUrlStr: sUrl]; 

Последняя строка производит следующее сообщение об ошибке:

Property «setwebServiceUrlStr» не найден на объект типа «WebServiceCall»

если удалить параметр из декларации, я не получаю ошибку

+2

Изменить последнюю строку на [self setwebServiceUrlStr: sUrl]; (удалите точку) – sha

ответ

0

Прямо сейчас у вас есть только метод с именем setwebServiceUrlStr:. Вы не объявили собственность. Чтобы объявить свойство, которое вы будете использовать:

@property (nonatomic, strong) NSMutableString *webServiceUrlStr; 

После того, как вы его объявили, ваш сеттер будет синтезирован автоматически и вам не нужно переписать его как у вас есть (то есть, вы можете удалить этот метод в настоящее время). Единственная причина, по которой вы бы отменили его, - это то, что вам нужна другая функциональность от значения по умолчанию, которое устанавливает соответствующую переменную экземпляра.

Установленный по умолчанию и геттер для объекта: propertyName (геттер) и setPropertyName: (сеттер). Поэтому, чтобы установить свойство, вы можете либо позвонить [self setPropertyName:var], либо использовать точечную нотацию, которая не включает слово «набор»: self.propertyName = var.

Так что ваш код будет выглядеть следующим образом:

NSString *sUrl = [defaults objectForKey:@"sUrl"]; 
self.webServiceUrlStr = sUrl; 

Примечание: Я бы рекомендовал не использовать изменяемую строку здесь, и только декларирует свою собственность, чтобы быть NSString вместо:

@property (nonatomic, copy) NSString *webServiceUrlStr; 

Если не вам явно необходимо изменить свойство (очень редко), вы не должны изменять его.

-1

Вы можете не называйте свойство, обозначающее «новый». поскольку параметр должен быть точным.

@sha указал на ошибку.

должно быть

self.webServiceUrlStr = sUrl; 

и если вы обращаетесь к свойству из другого класса. Это должно быть что-то вроде этого

WebServiceCall *webCall = [[WebServiceCall alloc] init] 

    [webCall SetWebServiceUrlStr:sUrl]; 
    or 
    webCall.webServiceUrlStr = sUrl; 
+0

Это неправильно.'new' имеет особое значение, если оно является частью имени метода, а не имени параметра. См. Комментарий sha выше для ответа. –

+0

Имя переменной здесь не имеет значения. Проблема в том, что свойства не используются правильно. – colinbrash

+0

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

Смежные вопросы