2013-01-05 37 views
11

Mục đích: Tôi muốn lấy giá trị của một thuộc tính (từ một thực thể) từ cơ sở dữ liệu (dữ liệu cốt lõi) vào một mảng.coredata - tìm nạp một thuộc tính vào một mảng

Ví dụ

Entity Name = Nhân viên

Attribute = EmployeeID

Tôi chỉ muốn tất cả các employeeIDs dân cư vào một mảng/thiết lập.

Câu hỏi

Đưa ra dưới đây là thực hiện của tôi, tôi chỉ cảm thấy đó là loại một vòng khoảng cách nào, tôi muốn biết nếu có một cách tốt hơn để làm điều này.

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Employees"]; 

fetchRequest.resultType = NSDictionaryResultType; 

[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"employeeID", nil]]; 

NSError *error  = nil; 
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest 
                   error:&error]; 

NSMutableArray *employeeIDs = [NSMutableArray array]; 

for(id currentRecord in results) 
{ 
    [employeeIDs addObject:[currentRecord objectForKey:@"employeeID"]]; 
} 
+0

Sử dụng tìm nạp làm từ điển tìm nạp tùy chọn yêu cầu và chỉ định "employeeID" làm khóa của bạn để tìm nạp. Kiểm tra NSFetchRequest.h. – nielsbot

Trả lời

23

Bạn có thể tránh cuối cùng cho vòng lặp,

Thay vì,

NSMutableArray *employeeIDs = [NSMutableArray array]; 

for(id currentRecord in results) 
{ 
    [employeeIDs addObject:[currentRecord objectForKey:@"employeeID"]]; 
} 

Hãy thử điều này,

NSMutableArray *employeeIDs = [results valueForKey:@"employeeID"]; 
+0

cảm ơn rất nhiều !! đã phá vỡ đầu của tôi trên nó. – user1046037

+8

Chỉ cần một người đứng đầu cho bất cứ ai khác: valueForKey trả về một NSArray. Nếu bạn thực sự cần nó để có thể thay đổi được, hãy gọi mutableCopy trên kết quả. NSMutableArray * employeeIDs = [[kết quả valueForKey: @ "employeeID"] mutableCopy]; – Mattio

+1

Nhận xét hoàn hảo, Mattio! –

16

Một cách để thực hiện việc này là -

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Employees"]; 
fetchRequest.resultType = NSDictionaryResultType; 

NSError *error  = nil; 
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest 
                   error:&error]; 

NSMutableArray *employeeIDs = [results valueForKey:@"employeeID"]; 
+0

Cảm ơn .. Nó đã giúp tôi .. – Shivaay

+2

Bạn có thể giới hạn các thuộc tính được trả về những gì bạn cần bằng cách sử dụng [yêu cầu setPropertiesToFetch: @ [@ "<# Attribute name #>"]]; Xem https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/fetchExpressions.html – MacMark

Các vấn đề liên quan