0

目的の C 初心者はこちら: 私の int メインは以下です。質問: 「No viability @interface for person declares the selector firstName」という悪名高いエラー メッセージが表示されるのはなぜですか?

.m ファイルには @synthesize firstName、lastName があります。

#import <UIKit/UIKit.h>
#import "AppDelegate.h" 
#import "Person.h"

int main(int argc, char *argv[])
{
 Person *ben = [[Person alloc] init]; 

 ben.firstName=@"Ben";
 NSLog(@"--->%@",ben.firstName);   //output ---->Ben

 [ben firstName:"Ben"];      //RED ERR: no visibility @interface for Person  
}

.h

#import <Foundation/Foundation.h>


@interface Person : NSObject
{
   NSString *firstName;
   NSString *lastName;
}

@property (nonatomic, copy) NSString *firstName;
@property (nonatomic, copy) NSString *lastName;

- (NSString *) fullName;
-(void) sayHello;

@end

彼ら

#import "Person.h"

@implementation Person
@synthesize firstName, lastName;

-(void) sayHello
{
    NSLog(@"Hello");
}

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

@end
4

4 に答える 4

4

使用する :

 [ben setfirstName:@"Ben"];      

Ben を firstName に設定しているためです。

お役に立てば幸いです。

于 2013-05-01T19:35:44.640 に答える
2

object-c では、firstName という名前のプロパティがある場合、2 つの方法で取得/設定できます

得る

NSString *firstName = obj.firstName;
NSString *firstName = [obj firstName];

設定

obj.firstName = @"First Name";
[obj setFirstName:@"First Name"];
于 2013-05-01T19:37:39.993 に答える
2

setter メソッドを使用し、 s@を構築するためのシンボルを忘れないでください。NSString

[ben setFirstName:@"Ben"];
于 2013-05-01T19:38:33.500 に答える
2

ゲッターとセッター ([foo something]および[foo setSomething:@"value"]) にブラケット構文を使用している場合、自動的に作成された (または合成された) セッターは で始まりsetます。したがって、あなたの場合、次のことを行う必要があります。[ben setFirstName:@"ben"]

foo.something別の方法は、getter と setter ( and ) にドット構文を使用することです。setfoo.something = @"value"プレフィックスを使用する必要はありません。その場合、あなたはそうしますben.firstName = @"ben"

于 2013-05-01T19:37:01.403 に答える