2014-01-29 7 views
1

В настоящее время я преподаю Objective-C как первый язык. Я понимаю трудность, но я спокойна настойчивая личность. Я начал выполнять упражнения по документации Apple Objective-C. Моя цель состоит в том, чтобы моя программа вышла из моего имени и фамилии вместо общего приветствия Hello World.Задача Objective-C необъявленная ошибка идентификатора

Я продолжаю получать сообщение об ошибке «Ошибка распознавания». Я пытаюсь выяснить, что вызывает ошибку.

Здесь introClass.h

#import <UIKit/UIKit.h> 

    @interface XYZperson : NSObject 

    @property NSString *firstName; 
    @property NSString *lastName; 
    @property NSDate *dateOfBirth; 
    - (void)sayHello; 
    - (void)saySomething:(NSString *)greeting; 
    + (instancetype)person; 
    -(int)xYZPointer; 
    -(NSString *)fullName; 
    @end 

Здесь IntroClass.m

#import "IntroClass.h" 

@implementation XYZperson 
-(NSString *)fullName 
{ 
    return[NSString stringWithFormat:@" %@ %@", self.firstName, self.lastName]; 
} 

-(void)sayHello 
{ 
    [self saySomething:@"Hello %@", fullName]; //use of undeclared identifier "fullName" 
}; 

-(void)saySomething:(NSString *)greeting 
{ 
    NSLog(@"%@", greeting); 
} 

+(instancetype)person{ 
    return [[self alloc] init]; 
}; 

- (int)xYZPointer { 
    int someInteger; 
    if (someInteger != nil){ 
     NSLog(@"its alive"); 
    } 
    return someInteger; 
}; 


@end 

ответ

2

Проблема заключается в том, что fullName это имя метода. Он должен быть вызван на self с квадратными скобками.

Поскольку saySomething: ожидает один параметр, вам необходимо либо (1) удалить @"Hello %@" часть вызова, например:

-(void)sayHello { 
    [self saySomething:[self fullName]]; 
}; 

или сделать одну строку из @"Hello %@" и [self fullName], как это:

-(void)sayHello { 
    [self saySomething:[NSString stringWithFormat:@"Hello %@", [self fullName]]]; 
}; 
+0

Это возвращает ошибку: слишком много аргументов для вызова метода, как ожидается 1, есть 2. – TheM00s3

+0

@ user3084800 взглянуть на коррекцию. – dasblinkenlight

+0

Большое вам спасибо, это сработало! Не могли бы вы также объяснить, почему метод SayHello допускает только один аргумент? – TheM00s3

0

использование

[self saySomething:@"Hello %@", self.fullName]]; 

или

[self saySomething:@"Hello %@", [self fullName]]; 
1

Вы передаете назад строку имени и фамилии, но я не вижу где-нибудь, что вы установили значение для них. Как и другие отметили, попробуйте

-(void)sayHello 
    { 
     _firstName = [NSString stringWithFormat:@"John"]; 
     _lastName = [NSString stringWithFormat:@"Doe"]; 

     //if you want to see what's happening through out your code, NSLog it like 
     NSLog(@"_firstName: %@ ...", _firstName); 
     NSLog(@"_lastName: %@ ...", _lastName); 

     NSString *strReturned = [self fullName]; 
     NSString *concatStr = [NSString stringWithFormat:@"Hello %@", strReturned]; 

     NSLog(@"strReturned: %@ ...", strReturned); 
     NSLog(@"concatStr: %@ ...", concatStr); 

     [self saySomething:concatStr]; 
    }; 

    -(NSString *)fullName 
    { 
     return[NSString stringWithFormat:@" %@ %@", self.firstName, self.lastName]; 
    } 
+0

Я попробовал второй способ, и он автоматически скорректировал firstName на _firstName и lastName на _lastName. Я получаю сообщение об ошибке [self sayomething: @ "hello% @", [self fullname]]; что: Слишком много аргументов для вызова метода, ожидаемого 1, имеют 2. – TheM00s3

+0

См. мой обновленный ответ –