iOS:在alloc和init之后返回*nil description*的对象

Ale*_*lex 1 objective-c ios

让我先说一下这个问题,我说我认为这是一个记忆管理错误.我似乎无法弄清楚它为什么会发生.

我有一个viewcontroller和一个名为的模型类Part.

#import <Foundation/Foundation.h>

@interface Part : NSObject

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *partType;
@property (nonatomic, strong) NSString *description;
@property (nonatomic, strong) NSNumber *price;

- (id)initWithName:(NSString *)name AndType:(NSString *)type;

@end
Run Code Online (Sandbox Code Playgroud)

在视图控制器中,我有一个属性设置如下:

@property (nonatomic, strong) Part *part;
Run Code Online (Sandbox Code Playgroud)

在我的init功能中ViewController创建一些静态数组并从中创建对象:

- (id)init {
    self = [super init];

    self.partList = [[NSMutableArray alloc] init];

    NSArray *inputArray = @[@"Part1",
    @"Part2",
    @"Part3",
    @"Part4",
    @"Part5",
    @"Part6",
    @"Part7",
    @"Part8"];

    NSString *tempType = @"PartCategory";

    // Add dummy static data
    for (int i = 0; i < [inputArray count]; i++) {
        Part *partInput = [[Part alloc] initWithName:[inputArray objectAtIndex:i] AndType:tempType];
        //partInput.name = [inputArray objectAtIndex:i];
        //partInput.partType = tempType;
        NSLog(@"Inserting Part %@", partInput);
        [self.partList addObject:partInput];
    }

    return self;
}
Run Code Online (Sandbox Code Playgroud)

NSLog该环路我调用返回Inserting Part *nil description*的每一个部分.我只是无法追踪到这里发生的事情.

编辑:这是控制器使用的initWithName方法Part:

- (id)initWithName:(NSString *)name AndType:(NSString *)type {
    if(self = [super init]) {
        self.name = name;
        self.partType = type;
    }

    return self;
}
Run Code Online (Sandbox Code Playgroud)

tia*_*tia 7

%@用于打印NSObject时,它debugDescription默认调用该description对象的方法,并且您的Part对象始终具有nil描述.

您最好通过将description属性名称更改为其他内容来解决此问题,因为它与description方法冲突NSObject.

另请参见:NSObject描述和debugDescription