0
#import <Foundation/Foundation.h>

@interface Location : NSObject
{
    int x_;
    int y_;
}
@property(assign) int x;
@property(assign) int y;
@end


#import "Location.h"


@implementation Location

@synthesize x = x_;
@synthesize y = y_;
@end


-(id) calcKey:(int)x theY:(int)y{
    Location* loc = [[Location alloc]init];
    loc.x = x;
    loc.y = y;
    return loc;
} 

for(id innerObj in arr){
   NSMutableDictionary* dic = [NSMutableDictionary dictionary];
   for(id innerObj in arr){
      MyStorage* storage = (MyStorage*)innerObj;
      id key = [self calcKey:storage.x theY:storage.y];
      [dic setObject:bri forKey:key];
   }
}

こんにちは、NSMutableDictionary にストレージを追加しようとしています。私の目的は、この辞書 dic を使用して、場所 (x,y) にストレージがある場所をさらに検索することです。しかし、常に失敗しました... 次の警告が表示されます。自分 ?どうもありがとう!:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Location copyWithZone:]: unrecognized selector sent to instance 0x6b4b160'
4

1 に答える 1

0

カスタム クラスのインスタンスをLocationキーとして使用しており、キーが辞書で使用されるとコピーされるため、 を実装してコピーのサポートを実装する必要がありますcopyWithZone:

メソッド名の「ゾーン」部分は、もう使用されていない古いメモリ管理スキームを参照しているため、無視してかまいません。

コメントで尋ねられたように、copyWithZone:メソッドは単純に新しいオブジェクトを作成し、インスタンス変数を設定して、新しいインスタンスを返す必要があります。isEqual:とをオーバーライドすることもできますhash。詳細はこちら

于 2012-06-24T08:14:36.337 に答える