長い質問で申し訳ありませんが、例を使って問題を説明してみてください。
私は3つのオブジェクトを持っています
- 疾患
- コンパウンド
- コムディス
それぞれのクラスに病気と化合物のリストを保存しています。
化合物と疾患の間の関係は Comdis と呼ばれるオブジェクトのリストに格納され、Comdis は (COMPOUND,DISEASE) のペアを格納します。
オブジェクトに格納される情報の例は次のとおりです。
DISEASES
index acronim fullname
1 AML, Acute Myelogenous Leukemia
2 PV, Polycytemia Vera
3 MF, Mielofibrosis
COMPOUNDS
index acronim fullname
1 LBH589, Panobinostat
2 INC424, Ruxolitinib
3 BKM120, Buparsinib
RELATIONS (COMDIS)
index disease compound
1 ( 0 , 1 )
2 ( 0 , 2 )
3 ( 0 , 3 )
4 ( 1 , 1 )
5 ( 1 , 2 )
6 ( 1 , 3 )
7 ( 2 , 1 )
8 ( 2 , 2 )
9 ( 2 , 3 )
私の病気.hは次のようになります。
@interface disease: NSObject
{
NSString __strong *acronim;
NSString __strong *fullname;
int backcolor;
UIImage __strong *background;
}
@property (nonatomic) int backcolor;
@property (nonatomic, strong) UIImage *background;
@property (nonatomic, strong) NSString *acronim;
@property (nonatomic, strong) NSString *fullname;
@property NSMutableArray *list;
- (id)initWithDiseaseList;
- (int)getIndexByAcronim:(NSString *)acronim;
@end
disease.m には次のコードがあります
#import "disease.h"
@implementation disease
@synthesize acronim, fullname, backcolor, background;
-(id)initWithDiseaseList {
disease *aml = [[disease alloc] init];
[aml setAcronim:@"AML"];
[aml setFullname:@"Acute Myelogenous Leukemia"];
disease *pv = [[disease alloc] init];
[pv setAcronim:@"PV"];
[pv setFullname:@"Polycytemia Vera"];
disease *mf = [[disease alloc] init];
[mf setAcronim:@"MF"];
[mf setFullname:@"Mielofibrosis"];
NSMutableArray *array = [NSMutableArray array];
[array addObject:aml];
[array addObject:pv];
[array addObject:mf];
self.list = array;
return self;
}
- (int)getIndexByAcronim:(NSString *)accr {
NSArray *array = self.list;
for(int i = 0; i < [array count]; i++) {
disease *disease = [array objectAtIndex:i];
if(disease.acronim == accr) {
return i;
}
}
return -1;
}
@end
私の Compound.m は、病気のオブジェクトに非常に似ています。
今comdisにリレーションを保存したい。
私のcomdis.hは次のようになります
@interface comdis: NSObject
{
int *icompound;
int *idisease;
}
@property (nonatomic,) int *icompound;
@property (nonatomic,) int *idisease;
@property NSMutableArray *list;
- (id)initWithComdisList;
@end
これは私のcomdis.mです
#import "comdis.h"
#import "compound.h"
#import "disease.h"
@implementation comdis
@synthesize idisease, icompound;
- (id)initWithComdisList {
compound *comp = [[compound alloc] initWithCompoundList];
disease *dis = [[disease alloc] initWithDiseaseList];
NSArray *compoundArray = comp.list;
NSArray *diseaseArray = dis.list;
NSMutableArray *array = [NSMutableArray array];
for(int i = 0; i < [diseaseArray count]; i++) {
for(int j = 0; j < [compoundArray count]; j++) {
int iCompoundIndex = [compoundArray indexOfObject:compoundArray[j]];
int iDiseaseIndex = [diseaseArray indexOfObject:diseaseArray[i]];
comdis *com = [[comdis alloc] init];
[com setIdisease:&iDiseaseIndex];
[com setIcompound:&iCompoundIndex];
[array addObject:com];
}
}
comdis *comdisObj = [self.list objectAtIndex:1];
int idis = *(comdisObj.idisease);
int icom = *(comdisObj.icompound);
NSLog(@"%d", idis);
NSLog(@"%d", icom);
return self;
}
@end
問題は、値を印刷しようとした場合、idis
または指定した値に関係なくicom
常に印刷される場合です。loop の値が上書きされているようで、常に loop の最後の値を取ります。2
objectAtIndex
長い説明とコードで申し訳ありません。