2009-01-29 30 views
28

Tôi mới phát triển Objective-C và iPhone, và tôi đang cố gắng lưu trữ các giá trị dấu phẩy động trong một NSMutableArray, nhưng khi tôi gặp lỗi "không tương thích gõ cho đối số 1 của 'addObject'. Tôi đang làm gì sai? Tôi đang cố gắng để tạo ra một mảng đôi mà tôi có thể thực hiện các phép tính toán với.Cách tạo một NSMutableArray của các giá trị dấu phẩy động

Trả lời

59

NSMutableArray chỉ giữ đối tượng, vì vậy bạn muốn một mảng được tải với các đối tượng NSNumber. Tạo mỗi NSNumber để giữ đôi của bạn sau đó thêm nó vào mảng của bạn. Có lẽ một cái gì đó như thế này.

NSMutableArray *array = [[NSMutableArray alloc] init]; 
NSNumber *num = [NSNumber numberWithFloat:10.0f]; 
[array addObject:num]; 

Lặp lại khi cần.

+0

Sử dụng numberWithFloat nếu bạn không cần độ chính xác. –

12

Sử dụng một NSNumber quấn phao của bạn, bởi vì các từ điển cần một đối tượng:

[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"]; 
/* or */ 
[myDictionary setObject:@0.2f forKey:@"theFloat"]; 

lấy nó bằng cách gửi floatValue:

float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue]; 

Mã là chưa được kiểm tra.

Bạn cũng có thể bao gồm nhiều loại dữ liệu khác trong NSNumber, hãy kiểm tra documentation. Ngoài ra còn có NSValue cho một số cấu trúc như NSPoint và NSRect.

7

Trong Cocoa, NSMutableDictionary (và tất cả các bộ sưu tập, thực sự) yêu cầu đối tượng dưới dạng giá trị, vì vậy bạn không thể đơn giản vượt qua bất kỳ loại dữ liệu nào khác. Khi cả sjmulder và Ryan đề nghị, bạn có thể bọc các giá trị vô hướng của bạn trong các trường hợp của NSNumber (cho số) và NSValue cho các đối tượng khác.

Nếu bạn đang đại diện cho một số thập phân, cho một cái gì đó giống như một mức giá, tôi cũng khuyên bạn nên xem và sử dụng NSDecimalNumber. Sau đó, bạn có thể tránh các vấn đề không chính xác về điểm nổi và bạn thường có thể sử dụng và lưu trữ "giá trị" dưới dạng NSDecimalNumber thay vì đại diện cho nó bằng mã nguyên thủy.

Ví dụ:

// somewhere 
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain]; 
NSMutableArray* prices= [[NSMutableArray array] retain]; 

// ... 

[prices addObject:price]; 
1
NSMutableArray *muArray = [[NSMutableArray alloc] init]; 
NSNumber *float = [NSNumber numberWithFloat:210.0f]; 
NSNumber *float1 = [NSNumber numberWithFloat:211.0f]; 
[muArray addObject:float]; 
[muArray addObject:float1]; 

NSlog(@"my array is--%@",muArray); 
+0

Vui lòng giải thích câu trả lời của bạn – Gwenc37

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