iOS:对象在alloc和init之后返回*nil description*
让我在开始这个问题之前说,我认为这是我这边的内存管理错误。我只是不明白为什么会这样 我有一个viewcontroller和一个名为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 (
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;
}