2008-12-19 41 views
21

Vấn đề của tôi là như sau. Tôi có một phương thức đơn giản lấy một đoạn trích XML và một XPath. Sau đó nó sẽ tạo cho tôi một mảng các đối tượng cho đoạn trích XML đó. Có nghĩa là nếu tôi vượt qua XML sau đây:Các lớp khởi động động trong Objective-C, có thể?

<user> 
    <name>Bob</name> 
    <age>50</age> 
</user> 

Phương pháp của tôi sẽ khởi tạo một phiên bản của lớp Người dùng và sử dụng khóa-giá trị mã hóa để đặt biến mẫu. Nó khá thẳng về phía trước. Vấn đề duy nhất là tôi đến từ chủ yếu là một nền tảng kịch bản và cố gắng để xem nếu nó có thể vượt qua các phương pháp một tên lớp. Ngay bây giờ nó đang làm một lớp người dùng, sau đó nó có thể là một lớp xe hơi, và sau đó là một lớp học gia đình. Cách tốt nhất để khởi tạo các đối tượng từ phương thức này thuộc loại khác trong khi vẫn giữ mã trừu tượng nhất có thể là gì?

Trả lời

54

Đối với instantiating một lớp học sử dụng tên gọi của nó, bạn có thể sử dụng NSClassFromString:

id obj = [[NSClassFromString(@"MySpecialClass") alloc] init]; 
23

Lớp học là những đối tượng và có thể được sử dụng/gửi giống như các đối tượng khác.

Để tạo một đối tượng lớp:

Class classForElement = [MyUserClass class]; 

Để tạo một đối tượng của lớp

id newObject = [[classForElement alloc] init]; 

Nếu tên lớp không giống như tên phần tử, tạo ra một từ điển mà có Lớp là đối tượng một tên phần tử làm khóa.

[NSDictionary dictionaryWithObjectsAndKeys: 
         [MyUserClass class], @"user", 
         [MyCarClass class], @"car", 
         [MyHomeClass class], @"home", 
          nil]]; 
1

Bạn muốn xem chi tiết dữ liệu cốt lõi. Đối tượng được quản lý có thể đến để giải cứu.

CocoaDevCentral có một số bài viết giới thiệu, nhưng bạn có thể cần tài liệu của Apple.

http://cocoadevcentral.com/articles/000086.php

[sửa] Tôi chỉ được nhắc nhở rằng bạn đang làm điều này trên iPhone. Không có khung Core Data không có nghĩa là bạn không thể mượn nó, và chỉ cần thực hiện lại những gì bạn cần. Một trong những khung công tác OpenStep nguồn mở có thể có mã.

Trên thiết bị di động, bạn có thể muốn cẩn thận về kích thước dữ liệu của mình.

Ezra Epstein trên runtime tạo ra các lớp học (và nhiều hơn nữa):

http://www.macdevcenter.com/pub/a/mac/2002/05/24/runtime_partone.html

+0

Lưu ý thẻ cảm ứng ca cao. Core Data không tồn tại trên iPhone. –

+0

Nó cung cấp các giải pháp, mặc dù. Tạo lại một tập con tối thiểu –

0

Hãy thử sử dụng id như các loại tham số trong phương pháp chữ ký của bạn. Một đối tượng id có thể nhập kiểu vào bất kỳ đối tượng lớp nào

Bạn đang thực hiện dự án cho iPhone. Bạn đang sử dụng NSXMLNode. Trong trường hợp của bạn, xin lưu ý rằng việc sử dụng NSXMLNode sẽ chỉ được phép trên trình mô phỏng. Nó sẽ không hoạt động trên iPhone vì NSXMLNode là một phần của thư viện lõi.

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