2017-06-23 20 views
3

對象的數組內的對象和它的屬性我在Objective-C新的編碼和我試圖找出如何做到以下幾點:訪問在Objective-C

我有一個類Company

@interface Company : NSObject 

@property (strong, nonatomic)NSString *companyID; 

@property (strong, nonatomic)NSString *companyName; 

@end 

我得到一個服務器的字典,只是解析對象。 之後,我將這些對象添加到數組中(它正在工作 - 這裏沒有問題 - 我得到了JSON)。

NSMutableDictionary *companyDictionary = [[NSMutableDictionary alloc]initWithDictionary:response]; 

NSArray *companyArray = [companyDictionary valueForKey:@"data"]; 
NSMutableArray *companyInformationArray = [NSMutableArray new]; 

//Parser 
for (int i = 0; i < [companyArray count]; i++) { 
    Company *company = [Company new]; 
    company.companyID = [[companyArray objectAtIndex:i] valueForKey:@"company_id"]; 
    company.companyName = [[companyArray objectAtIndex:i] valueForKey:@"name"]; 

    [companyInformationArray addObject:company]; 
} 

的問題是:我需要訪問的對象和它的領域內

companyInformationArray 

我只是試圖做(這兩個接近會當然不是工作)類似的東西:

Company *company = [Company new]; 
company = [[companyInformationArray objectAtIndex:0] valueForKey:@"name"]; 

或者:

Company *company = [Company new]; 
company.companyName = [[companyInformationArray objectAtIndex:0] companyName]; 

你能幫我嗎?

謝謝!

+1

一個非常次要的,不相關的觀察:對''Company''類'NSString'屬性使用'copy'而不是'strong'通常是謹慎的。通過使用'strong',如果字符串碰巧是'NSMutableString'並且稍後發生了變異,那麼您的公司對象也會無意中變異。通過使其成爲「複製」,你可以避免這種情況(公認是邊緣情況)。 – Rob

回答

3

關閉我的頭頂部(不運行它來測試)...

// get the Company object at slot [0] in the array of Company objects 
Company *company = (Company *)[companyInformationArray objectAtIndex:0]; 

// now use the properties... 
myNameLabel.text = company.companyName; 
myIDLabel.text = company.companyID; 
6

的Objective-C現在支持輕量級仿製藥。例如,而不是簡單的NSMutableArray,你可以指定你的陣列是Company對象的數組:

NSMutableArray <Company *> *companyInformationArray; 

然後,你可以這樣做:

NSString *nameOfSecondCompany = companyInformationArray[1].companyName; 

這樣做的優點是,如果你嘗試添加非Company的東西,編譯器會發出警告,同樣你也可以在沒有任何投射的情況下享受強大的屬性輸入。

+0

謝謝你的幫助。 我會記住它的。 – BSants

+1

不錯的加法;當Xcode自動完成枚舉塊時,這是特別有用的。而不是'[companyInformationArray enumerateObjectsUsingBlock:^(id _Nonnull obj,NSUInteger idx,BOOL * _Nonnull stop){}];'',您得到'[companyInformationArray enumerateObjectsUsingBlock:^(Company * _Nonnull obj,NSUInteger idx,BOOL * _Nonnull stop){ }];' – fullofsquirrels

+1

這比在特定索引處投射元素要好得多。爲什麼放棄編譯器支持,如果你有它? – Chris