2013-03-19 41 views
7

Tôi viết một phương thức trả về một trường hợp quan điểm điều khiển cho một lớp học xem điều khiển được đưa ra, nhưng tôi cần phải chắc chắn rằng các lớp học được thông qua năm thực sự là một lớp view controller:iOS: Làm thế nào để kiểm tra một lớp nhất định là một loại lớp UIViewController?

- (UIViewController *)viewControllerWithClass:(Class)cls nibName:(NSString *)nibName 
{ 
    if (cls is kind of UIViewController subclass) 
     return [[[cls alloc] initWithNibNamed:nibName bundle:nil] autorelease]; 
    return nil; 
} 

Tôi không thể so sánh tên của lớp học kể từ cls có thể không phải là UIViewController.

chỉnh sửa:

Xin lỗi tôi có nghĩa là bên trong phương pháp, làm thế nào để kiểm tra xem cls là một loại phân lớp UIViewController

Trả lời

24
if ([cls isSubclassOfClass:[UIViewController class]]) { 


    //Your code 

} 
+4

Vì đây là câu trả lời được chấp nhận, tôi chỉ muốn làm rõ rằng tất cả các câu trả lời khác sử dụng phương pháp isKindOfClass là sai, isKindOfClass không hoạt động cho các đối tượng có loại 'Lớp' (như cls là trong này ví dụ), [[CDMyClass class] isKindOfClass: [CDMyClass class]] trả về NO cũng [CDMyClass isKindOfClass: [CDMyClass class]] trả về NO. Để sử dụng một bộ thu mà là một loại Class bạn nên sử dụng isSubclassOfClass – LightMan

1

bạn có thể sử dụng mã dưới đây.

if ([cls isKindOfClass:[UIViewController class]]) { 
    //your code 
} 
0

Nếu bạn có một đối tượng lớp đại diện cho lớp Objective-C để được kiểm tra sau đó sử dụng + (BOOL)isSubclassOfClass:(Class)aClass mà trả về một giá trị Boolean cho biết xem máy thu là một thể hiện của lớp nhất định hoặc một thể hiện của bất kỳ lớp được thừa kế từ lớp đó. (Bắt buộc)

if([cls isKindOfClass:[UIViewController class]]) 
{ 
} 

EDIT

Nếu bạn có một đối tượng lớp đó là một lớp con của-hoặc giống hệt nhau đến lớp để được kiểm tra sau đó sử dụng + (BOOL)isSubclassOfClass:(Class)aClass mà trả về một giá trị Boolean cho biết xem lớp nhận là một lớp con của hoặc giống hệt với một lớp đã cho.

if([cls isSubclassOfClass:[UIViewController class]]) 
{ 
} 
0
// Check This out 
if([youViewControllerObject isKindOfClass:[UIViewController class]]) 
{ 
    NSLog(@"isViewcontroller Class"); 
} 
0

Câu trả lời này đến muộn một chút, nhưng kể từ khi bạn muốn kiểm tra các lớp của một Object Lớp (không phải là một thể hiện của một lớp), sau đây là các thử nghiệm thích hợp:

+0

không, họ không muốn kiểm tra xem nó chính xác 'UIViewController', họ muốn biết nếu nó là' UIViewController' hoặc một phân lớp của nó – newacct

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