NSLog与NSString和分手main.m

时间:2012-11-14 03:39:46

标签: objective-c

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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