2013-08-22 33 views
0

我有一個相當大的NSMutableArray類文件。該陣列具有多個屬性,如下所示:具有多個屬性的NSMutableArray

[Element elementsName:@"Lithium" elementsNumber:@"3"], 
[Element elementsName:@"Beryllium" elementsNumber:@"4"], 
[Element elementsName:@"Boron" elementsNumber:@"5"], 
[Element elementsName:@"Carbon" elementsNumber:@"6"], 
[Element elementsName:@"Nitrogen" elementsNumber:@"7"], 
[Element elementsName:@"Oxygen" elementsNumber:@"8"], 
[Element elementsName:@"Fluorine" elementsNumber:@"9"], 
[Element elementsName:@"Neon" elementsNumber:@"10"], 

我需要能夠分別訪問elementsName和elementsNumber。

有人會知道如何做到這一點,這有可能嗎?謝謝! (下面更多的代碼!)

element.h展開(類數組)

@interface Element : NSObject 
{ 
    NSString *name; 
    NSString *number; 
} 

@property(nonatomic, copy)NSString *name; 
@property(nonatomic, copy)NSString *number; 

+(id)elementsName:(NSString *)name elementsNumber:(NSString *)number; 

和Element.m

#import "Element.h" 

@implementation Element; 
@synthesize number; 
@synthesize name; 

+(id)elementsName:(NSString *)name elementsNumber:(NSString *)number 
{ 
    Element *newElement = [[self alloc] init]; 
    newElement.name = name; 
    newElement.number = number; 
    return newElement; 
} 

@end 
+0

這不是一個Xcode問題。 – 2013-08-22 16:47:23

+0

爲什麼你不嘗試使用NSDictionary數組而不是數組的多個屬性 – Warewolf

+2

您的語法關閉。你的構造函數方法應該被命名爲'elementWithName:(NSString *)name number:(NSNumber *)number'。另外,從Xcode 4.6中刪除'iVars'和'synthesize'你不再需要它們。 – Fogmeister

回答

1

你可以嘗試這樣的事:

for(int i = 0; i<elementArray.count; i++) 
{ 
    NSString *name = ((Element*)[elementArray objectAtIndex:i]).name; 
    NSString *number = ((Element*)[elementArray objectAtIndex:i]).number; 
} 
0

這是你在找什麼? :

// returns an array of all numbers 
NSArray *numbers = [elementArray valueForKey:@"number"]; 

// returns an array of all names 
NSArray *names = [elementArray valueForKey:@"name"]; 

這被稱爲KVC(鍵值編碼)並使用字符串來訪問對象的屬性。此示例遍歷數組中的所有元素,並要求其numbername屬性,然後將結果作爲數組返回。

這也可以通過for-loop來實現。我主要包括這個給你發生了什麼事的想法:

NSMutableArray *names = [NSMutableArray array]; 
NSMutableArray *numbers = [NSMutableArray array]; 
for (Element *e in elementsArray) { 
    [names addObject:e.name]; 
    [numbers addObject:e.number]; 
} 

顯然這會工作爲好,但爲什麼不使用valueForKey:時,它是專爲這個?

0

可以使用的NSDictionary代替。

NSArray *[email protected][@{@"elementsName":@"Lithium",@"elementsNumber":@"3"}, 
        @{@"elementsName":@"Beryllium",@"elementsNumber":@"4"}, 
        @{@"elementsName":@"Boron",@"elementsNumber":@"5"}, 
        @{@"elementsName":@"Carbon",@"elementsNumber":@"6"}, 
        @{@"elementsName":@"Nitrogen",@"elementsNumber":@"7"}]; 


NSLog(@"dic is %@",arrOfDic); 

讓您的元素和它們的數量

NSLog(@"FirstObject is Element = %@ Element No = %@",arrOfDic[0][@"elementsName"],arrOfDic[0][@"elementsNumber"]); 
    NSLog(@"SecondObject is Element = %@ Element No = %@",arrOfDic[1][@"elementsName"],arrOfDic[1][@"elementsNumber"]); 

並且什麼不對您的文件,這是工作的罰款。

NSMutableArray *mArray=[[NSMutableArray alloc] init]; 

[mArray addObject:[Element elementsName:@"Lithium" elementsNumber:@"3"]]; 
[mArray addObject:[Element elementsName:@"Beryllium" elementsNumber:@"5"]]; 
[mArray addObject:[Element elementsName:@"Boron" elementsNumber:@"6"]]; 

Element *element=(Element*)[mArray objectAtIndex:0]; 

NSLog(@"My first element is name = %@ ,number = %@",element.name,element.number); 

輸出---

我的第一個元素是名稱=鋰,編號= 3