0

2つのファイルがあります。それらfileOneを呼び出してみましょうfileTwo

それぞれに、同じ名前の複数の NSMutableDictionary プロパティがあります。いくつかをリストするには:

@property (retain, nonatomic) NSMutableDictionary * lunchStartTimeObject;
@property (retain, nonatomic) NSMutableDictionary * lunchLocationNameObject;
@property (retain, nonatomic) NSMutableDictionary * lunchLocationAddressObject;
@property (retain, nonatomic) NSMutableDictionary * activity1NameObject;
@property (retain, nonatomic) NSMutableDictionary * activity1StartTimeObject;
@property (retain, nonatomic) NSMutableDictionary * activity1LocationNameObject;
@property (retain, nonatomic) NSMutableDictionary * activity1CommentsFieldObject;
@property (retain, nonatomic) NSMutableDictionary * activity1LocationAddressObject;
@property (retain, nonatomic) NSMutableDictionary * activity2NameObject;
@property (retain, nonatomic) NSMutableDictionary * activity2StartTimeObject;
@property (retain, nonatomic) NSMutableDictionary * activity2LocationNameObject;
@property (retain, nonatomic) NSMutableDictionary * activity2CommentsFieldObject;
@property (retain, nonatomic) NSMutableDictionary * activity2LocationAddressObject;

以下のメソッド (または同様のもの) を呼び出して、2 つのファイル内の同じ名前の辞書を比較したいと思います。

-(NSMutableDictionary *)cellColorForChanges:(NSMutableDictionary *)newdictionary :(NSMutableDictionary *)oldDictionary;
{
    if(![newdictionary isEqualToDictionary:oldDictionary])
    {
        [newdictionary  setValue:@"UIColor yellowColor" forKey:@"cellColor"];
    }
    return newdictionary;
}

各 NSMutableDictionary のコードを手動で記述しないようにしています。以下を回避する方法はありますか。

if(![fileOne.lunchStartTimeObject isEqualToDictionary:fileTwo.lunchStartTimeObject])
{  
    fileOne.lunchStartTimeObject setValue:@"UIColor yellowColor" forKey:@"cellColor"]; 
}

上記を達成するための最も効率的な方法を見つけるのに苦労しています。各辞書をメソッドに送信し、辞書を取得することは何とか可能ですか (等しくない場合は別のキーで更新されます)? または、私が避けようとしているものは避けられませんか?

4

1 に答える 1

0

オブジェクトを十分に抽象化していないため、この問題が発生しています。上記のプロパティ リストはばかげて冗長であるように私には思えます。あなたが提供した単純なコードコードでさえ、ほとんど読めません。

より概念的な方法で問題を考えてみてください。探している機能をカプセル化できるオブジェクトを考えてみてください。

プロパティを見ると、おそらくこのようなクラスが必要です

@interface Activity : NSObject

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSDate *startTime;
@property (nonatomic, strong) Location *location;

-(BOOL)isEqualToActivity:(Activity*)activity;

@end

場所に関する詳細情報を格納する場所クラスが必要になる場合があります。おそらく、firstName、lastName などのさらに多くのフィールドを使用できます。typeアクティビティの種類などを示す (列挙型または文字列) プロパティが必要な場合があります。

示されているように、多かれ少なかれ厳密な大文字または小文字、数値形式などを許可するために微調整できる独自の比較方法を作成できます。

于 2013-10-14T00:02:42.987 に答える