Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:对象在alloc和init之后返回*nil description*_Ios_Objective C - Fatal编程技术网

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

iOS:对象在alloc和init之后返回*nil description*,ios,objective-c,Ios,Objective C,让我在开始这个问题之前说,我认为这是我这边的内存管理错误。我只是不明白为什么会这样 我有一个viewcontroller和一个名为Part的模型类 #import <Foundation/Foundation.h> @interface Part : NSObject @property (nonatomic, strong) NSString *name; @property (nonatomic, strong) NSString *partType; @property (

让我在开始这个问题之前说,我认为这是我这边的内存管理错误。我只是不明白为什么会这样

我有一个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
ViewController
init
函数中,我创建了一些静态数组,并从中创建了对象:

- (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;
}

当使用
%@
打印NSObject时,它会调用
debugDescription
,默认情况下调用该对象的
description
方法,并且您的
部分
对象始终具有
nil
描述

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


另请参见:

当使用
%@
打印NSObject时,它调用
debugDescription
,默认情况下调用该对象的
description
方法,并且您的
部分
对象始终具有
nil
描述

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


另请参见:

能否添加
部分的init方法。在执行
self=[super init]之后,您应该始终使用
if(self)
。您仍然应该检查
self
是否是
-(id)init
方法中的有效指针;)在零件类的实现中向我们显示
-(id)initWithName:(NSString*)name和type:(NSString*)type
零件
类是否覆盖
说明
调试说明
方法?@orbv,将
NSString*说明
重命名为其他内容。您不应该在此处使用
说明
<代码>说明
已用于打印对象的说明。请添加
部分
的init方法。在执行
self=[super init]之后,您应该始终使用
if(self)
。您仍然应该检查
self
是否是
-(id)init
方法中的有效指针;)在零件类的实现中向我们显示
-(id)initWithName:(NSString*)name和type:(NSString*)type
零件
类是否覆盖
说明
调试说明
方法?@orbv,将
NSString*说明
重命名为其他内容。您不应该在此处使用
说明
<代码>说明已用于打印对象的说明。谢谢。看来我犯了初学者的错误。谢谢你。看来我犯了初学者的错误。
- (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;
}
- (id)initWithName:(NSString *)name AndType:(NSString *)type {
    if(self = [super init]) {
        self.name = name;
        self.partType = type;
    }

    return self;
}