2011-01-06 24 views
11

Tôi có một thư viện nơi tôi nhận được NSConcreteValue và tôi không biết cách xử lý nó. Tôi biết đối tượng mà tôi phải nhận là một boolean, vậy làm cách nào để giải phóng giá trị thực?NSConcreteValue là gì và làm cách nào để trích xuất giá trị của nó?

+1

Làm thế nào để bạn biết rằng bạn sẽ có được NSConcreteValue? Theo liên kết này http://lists.apple.com/archives/cocoa-dev/2003/Oct/msg00096.html có thể là lớp con riêng của lớp NSValue. Hãy thử kiểm tra xem (như được mô tả trong liên kết). Ngoài ra hãy thử đăng nhập NSLog (@ "% s", [yourConcreteValue objCType]) để xem chính xác loại nào được lưu trữ trong đối tượng đó – Vladimir

Trả lời

12

Đó là lớp riêng tư đôi khi (hoặc mọi lần?) Được sử dụng sau hậu trường khi bạn làm việc với NSValue. Hoặc ít nhất đó là ấn tượng của tôi. Tôi nghĩ rằng bạn sẽ có thể cast vào NSValue:

// assuming value is of type “id” 
NSAssert([value isKindOfClass:[NSValue class]], 
    @"Sorry, I was wrong. Maybe try anyway?"); 
NSAssert(strcmp(@encode(BOOL), [value objCType]) == 0, 
    @"The value does not seem to hold a BOOL."); 
BOOL unwrappedValue; 
[value getValue:&unwrappedValue]; 

... hoặc một cái gì đó như thế, tôi đang làm này lên :-)

+0

+1 ví dụ tuyệt vời về việc sử dụng NSAssert để xác minh loại và loại giá trị. (mặc dù nó có thể không cần thiết để thực hiện các diễn viên để 'NSValue' - chỉ cần sử dụng' -getValue: ') –

+0

Bạn nói đúng, tôi chắc chắn anh ta không nhận được giá trị như' NSConcreteValue'. Có nhiều khả năng anh ta nhận được 'id' từ bộ sưu tập hoặc thứ gì đó, tôi sẽ chỉnh sửa câu trả lời. – zoul

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