0

在我运行这个程序之前,我有 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;
}
4

2 回答 2

1

使用 NSLog 时,%@用于记录对象,但这些方法返回 int(原始类型)。将它们替换为%d(十进制 int 的字符串格式),该行应该停止崩溃。

要拆分它们,只需创建新的 .m 和 .h 文件。XCode 应该能够帮助您完成这个过程。.m 文件将被自动编译,并且 .h 文件应该(一般来说)包含在任何需要有关它所引用的类的信息的文件中。所以第 1 部分将是 Person.h,第 2 部分将是 Person.h(并包括行@import Person.h,第 3 部分将保留在 main.m 中。

于 2012-11-14T03:44:57.293 回答
0

如果你不介意我问,为什么不直接使用属性?它将使您的代码保持干净和简单,并且还可以为您节省大量输入。如果您需要实现属性无法提供的自定义行为,您应该只实现访问器。

于 2012-11-14T07:42:50.087 回答