在我运行这个程序之前,我有0个错误或警告。但是当我运行它时,我得到的输出是(lldb)
,XCode 突出显示我的 NSLog 输出并说Thread 1 Breakpoint 1
?我的第一个问题是为什么我没有得到任何输出,我该如何解决我必须获得输出的问题?我的第二个问题是,我怎样才能把这些部分分解出来,把它们放到自己的类中。所以不要把它们都放在main.m上。这是我从Java用XCode编码的第一天,所以我仍在学习这种语言。谢谢。
第 1 部分
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString * name;
int age;
int weight;
}
/***************************************
* MUTATORS FOR PERSON INTERFACE
***************************************/
- (void) setName : (NSString *) n;
- (void) setAge : (int) a;
- (void) setWeight : (int) w;
/***************************************
* MUTATORS FOR PERSON INTERFACE
***************************************/
-(NSString *) getName;
-(int) getAge;
- (int) getWeight;
@end
第 2 部分
@implementation Person
/***************************************
* MUTATORS FOR PERSON IMPLEMENTATION
***************************************/
-(void) setName:(NSString *) n
{
name = n;
}
-(void) setAge:(int) a
{
age = a;
}
-(void) setWeight:(int)w
{
weight = w;
}
/**********************************
* ACCESSORS FOR PERSON IMPLEMENTATION
**********************************/
-(NSString *) getName
{
return name;
}
-(int) getAge
{
return age;
}
-(int) getWeight
{
return weight;
}
@end
第 3 部分 这就是我遇到问题的地方。它不喜欢NSLog
int main (int argc, const char * argv[])
{
@autoreleasepool
{
Person *p1 = [[Person alloc]init];
[p1 setName: @"Chris"];
[p1 setAge:18];
[p1 setWeight:200];
NSLog(@"nName: %@ nAge: %i nWeight: %i", p1.getName, p1.getAge, p1.getWeight);
}
return 0;
}
使用 NSLog 时,%@
用于记录对象,但这些方法返回 int(基元类型)。将它们替换为 %d
(Decimal int 的字符串格式),该行应该停止崩溃。
要拆分它们,只需创建新的 .m 和 .h 文件。XCode应该能够帮助您完成此过程。.m文件将自动编译,.h文件应该(一般来说)包含在任何需要有关其引用的类的信息的文件中。因此,第 1 部分将是 Person.h,第 2 部分将是 Person.h(并包括行@import Person.h
,第 3 部分将保留在 main.m 中。
如果你不介意我问,为什么不直接使用属性?它将使您的代码保持干净和简单,还可以为您节省大量键入时间。仅当需要实现属性无法提供的自定义行为时,才应实现访问器。