1

この質問の前に、これは私の側でのメモリ管理の誤りであると信じていると言っておきましょう。なぜそれが起こっているのか理解できないようです。

という名前のビューコントローラーとモデルクラスがあり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

ビューコントローラーでは、次のようにプロパティを設定しています。

@property (nonatomic, strong) Part *part;

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

そのNSLogループで呼び出す I は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;
}
4

1 に答える 1

7

%@NSObject を印刷するために使用する場合debugDescription、デフォルトdescriptionでそのオブジェクトのメソッドを呼び出すことを呼び出し、Partオブジェクトには常にnil説明があります。

のメソッドdescriptionと競合するため、プロパティ名を別の名前に変更することでこれを解決することをお勧めします。descriptionNSObject

参照: NSObject の説明と debugDescription

于 2013-01-18T19:00:01.783 に答える