0

実は、問題は @property (nonatomic, copy) NSMutableArray* arrayOfObjects;

あるべきです: @property (nonatomic, strong) NSMutableArray* arrayOfObjects; ええ?その人たちに感謝します!

このバグがどのように機能したかは正確にはわかりませんが、知りたいと思います:)


私は 1 時間以上前から 1 つの問題を解決しようとしています... 非常に単純なことではないかと思いますが、まだ理解できていません。これはメモリ管理に関するものであると推測していますが、これはまだ私の間違いなく弱点です。

「インスタンスに送信された認識されないセレクター」などに少し似た投稿 をします が、私の問題は解決しませんでした...

一言で言えば(多くの原因を貼り付けると、潜在的なバグがどこにあるのかわかりません):

@interface MyCustomObject : NSObject {
    NSString* name;
    int birthDate;
    double heightInMeters;
}

@property(strong, nonatomic) NSString * name;
@property(nonatomic) int birthDay;
@property(nonatomic) double heightInMeters;

-(id)initWithDate:(int)birthDate 
        AndName:(NSString *)nameString 
        AndHeight:(double)h;
@end

/////////////////////////////////

#import "MyCustomObject.h"

@implementation MyCustomObject

@synthesize name;
@synthesize birthDay;
@synthesize heightInMeters;

-(id)initWithDate:(int)bd AndName:(NSString *)nameString AndHeight:(double)h{

    if(self = [super init]){
        self.birthDay = bd;
        self.name = nameString;
        self.heightInMeters = h;
        return self;
    }
    return nil;
}
@end

そして、ある種のMyCustomObjects のデータベース:

DataCollection.h:

@interface DataCollection : NSObject{

    NSMutableArray* arrayOfObjects;

}
@property (nonatomic, copy) NSMutableArray* arrayOfObjects;

    -(void)addElement:(id)el;
@end

そして実装:

    #import "DataCollection.h"

    @implementation DataCollection 
    @synthesize arrayOfObjects;

    -(id)init{
        if(self = [super init]){
            self.arrayOfObjects = [[NSMutableArray array] init];
            NSLog(@"Number of record before init: %d", [self.arrayOfObjects count]);
            [self addElement:[[MyCustomObject alloc] initWithDate:1988 AndName:@"Georg" AndHeight:1.88]];
            [self addElement:[[MyCustomObject alloc] initWithDate:1951 AndName:@"Sebastian" AndHeight:1.58]];
            NSLog(@"Number of record before init: %d", [self.arrayOfObjects count]);
            return self;
        }
        return nil;
    }

    -(void)addElement:(id)el{
        // UNRECOGNIZED SELECTOR ????
[self.arrayOfObjects addObject:el];
    }

    @end

結果は次のとおりです。

2013-03-05 15:42:56.826 XMLTest[11787:207] 初期化前のレコード数: 0 現在の言語: 自動; 現在、objective-c 2013-03-05 15:43:51.446 XMLTest[11787:207] -[__NSArrayI addObject:]: 認識されないセレクターがインスタンス 0x6816110 に送信されました

私が間違っていることがわかりますか?これはメモリ管理に関するものだと思います

4

2 に答える 2

3

変更した場合

@property (nonatomic, copy) NSMutableArray* arrayOfObjects;

@property (nonatomic, strong) NSMutableArray* arrayOfObjects;

それはあなたの問題を解決するはずです

于 2013-03-05T14:58:42.317 に答える
0

私は実際にあなたの質問を読んでいませんでした - それは長すぎますが、私はあなたの問題を知っていると思います. addObject:投稿の最後にあるデバッガーの出力だけを見ると、NSArrayオブジェクトに送信しようとしているように見えます。NSMutableArrayオブジェクトを配列に追加および削除する場合は、代わりに使用する必要があります。

于 2013-03-05T14:57:17.807 に答える