0

1 つのクラスで、NSMutableArrayゲッターとセッターを使用して を定義します。

@interface ArrayClass : NSObject {
    NSMutableArray *array;
}
@property (nonatomic, strong) NSMutableArray *array;

@end

次に、実装ファイル内にalloc init可変配列を挿入します。

#import "ImageUploader.h"

@implementation ArrayClass
@synthesize array;

- (id)init {
    self = [super init];
    if (self != nil) {
        NSLog(@"ArrayClass inited");
        array = [[NSMutableArray alloc] init];
    }
    return self;
}

@end

次に、このクラスのインスタンスを別のクラスから初期化します。

ArrayClass *arrayClass = [[ArrayClass alloc] init];
                [arrayClass.array addObject:image];
                NSUInteger count = [arrayClass.array count];
                NSLog(@"%@", count);

しかし、可変配列にオブジェクトを追加しようとすると、アプリがクラッシュし、Xcode 4.3 が表示されます。 ここに画像の説明を入力

addObject呼び出しを削除すると、アプリが正常に実行されます。アプリがクラッシュする原因となる間違ったことは何ですか?

4

6 に答える 6

2

これは間違っています:

NSUInteger count = [arrayClass.array count];
NSLog(@"%@", count);

あなたがしたい:

NSLog(@"%u", count);

%@引数がオブジェクトであることを指定するために使用されます。ただし、NSUInteger はプリミティブ値であり、オブジェクトではありません。%uunsigned int に使用します。

于 2012-04-06T17:39:52.827 に答える
1

試す:

NSLog(@"%i", count);

NSUIntegerは、オブジェクトアドレスではなくINTを返します

于 2012-04-06T17:37:21.450 に答える
1
NSLog(@"%@", count); 

間違っている、使用:

NSLog(@"%i", count); 

%@formatステートメントでは、オブジェクトである必要があり、オブジェクトである必要があり、オブジェクトでNSUIntegerはなくintにあります。

于 2012-04-06T17:38:58.130 に答える
1

通常の の typedef である%@に対して、Cocoa オブジェクト専用のフォーマット指定子を使用しています。代わりに %d、%i、または %u を使用してください。NSUIntegerunsigned int

于 2012-04-06T17:49:37.637 に答える
0

カウントのロギングが間違っていることに同意しますが、他の回答には明確なポイントが欠けていると思います。クラッシュは addObject で発生します。これは、イメージが nil であることを意味します。追加前の NSLog。

于 2012-04-06T17:43:55.643 に答える
0

説明を印刷しようとするとクラッシュしているように見えますが、これは%@NSLog().

それとは別に、可変プロパティを使用することは、ほとんどの場合、悪い考えです。それが本当にプロパティである場合は、おそらく不変の配列を使用し、変更したいときに配列全体を設定することをお勧めします。

于 2012-04-06T17:40:51.383 に答える