2013-03-05 42 views
0

对于冗长的问题,我表示歉意,虐待尝试用示例演示问题。将关系数据存储在对象中,覆盖值

我有三个对象

  1. 疾病
  2. 化合物
  3. Comdis

我存储各个类别疾病和化合物的列表。

化合物和疾病之间的关系将被存储在名为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) 

我disease.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 

的问题是,如果我尝试打印价值idisicom它总是打印2,无论objectAtIndex价值我给。它看起来循环中的值被覆盖,并且它总是取循环的最后一个值,我是一个初学者objective-c,并且如果有人能够说明我的代码有什么问题,我会很感激。

对不起再详细的解释和代码。

+0

我看到这可以在5分钟内使用CoreData解决! – 2013-03-05 09:14:15

+0

@AnoopVaidya任何提示或任何可能的解决方案? – 2013-03-05 09:17:06

+0

可以请你分享你的问题,根据班级图或甚至用文字。 NO代码,请:) – 2013-03-05 09:22:15

回答

1

[com setIdisease:&iDiseaseIndex];由于所有comdis对象的属性疾病和化合物指的是相同的地址,它们都等于最后添加的对象的值。为了解决这个问题,你可以在comdis中使用int属性而不是* int