2011-10-07 25 views
29

__NSArrayI và __NSArrayM là gì?__NSArrayI và __NSArrayM là gì? Làm thế nào để chuyển đổi sang NSArray?

__NSArrayI (hoặc M) gây ra lỗi "bộ chọn không được nhận dạng".

Làm thế nào để chuyển đổi sang NSArray?


Tôi đã kiểm tra để phân tích cú pháp json, twitter api.

http://api.twitter.com/1/followers/ids.json?cursor=-1&screen_name=twitterapi

==> hoạt động tốt. đối tượng được phân tích cú pháp là lớp NSCFDictionary. (Từ điển này chứa lớp __NSArrayM)

http://api.twitter.com/1/statuses/user_timeline.json?&screen_name=twitterapi

==> lỗi. đối tượng được phân tích cú pháp là lớp __NSArrayM.

+2

bài mã cung cấp cho bạn một lỗi. – Vladimir

+2

__NSArrayI => Không thể thay đổi NSArray __NSArrayM => Mutable NSArray –

+1

Đồng thời đăng thông báo chọn không được chấp nhận. – JeremyP

Trả lời

70

__NSArrayI được một mã chữ cho một mảng bất biến - có nghĩa là, một "thường xuyên" NSArray mà bạn không thể thay đổi.

__NSArrayM là từ mã cho một mảng có thể thay đổi - nghĩa là, NSMutableArray. Trong NSMutableArray, bạn có thể thêm và xóa các mục.

+7

Đẹp - bạn tìm thấy kiến ​​thức này ở đâu? Bởi chỉ cần đọc trực tiếp nguồn gốc của thời gian chạy? Hoặc có một số loại tài liệu ở đâu đó. – sean

+2

Tên là một đầu mối tốt ("M" và "I" trong ngữ cảnh mảng không thể có nghĩa là nhiều nhưng có thể thay đổi và không đổi), nhưng cách tốt nhất là kiểm tra các đối tượng mà bạn biết là NSArrays sử dụng object_getClass(). –

+0

@Catfish_Man six –

1

Đây là các lớp riêng tư. Bạn không nên truy cập chúng hoặc chuyển đổi chúng.

Nếu tôi không nhầm NSArray là lớp con của _NSArray.

Nếu bạn đang thêm/gỡ bỏ một số đối tượng đến/từ kiểm tra mảng của bạn mà nó là loại có thể thay đổi: NSMutableArray

4

Đây là các lớp của api riêng tư. Có is a project nơi bạn có thể xem tất cả các lớp của api riêng. Bạn không được phép sử dụng chúng bên trong một ứng dụng cho các app store nhưng đôi khi nó rất hữu ích quá xem làm thế nào để truy cập vào các đối tượng và cũng là loại đối tượng nó được. Chúng không thể được chuyển đổi. Tôi nghĩ, việc nhận các loại đối tượng này bên trong trình gỡ rối chỉ là biểu diễn của các lớp bên trong, cho các lớp bạn đang sử dụng bên trong dự án của bạn. Biết được loại lớp học nào, cho phép bạn cũng hiểu nơi để tìm sự cố bên trong mã của bạn.

Ở đây bạn có thể thấy một tra cứu ngắn của cả hai:

__NSArrayI

enter image description here

__NSArrayM

enter image description here

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