2014-02-18 4 views
0

Я создал подкласс NSObject без какой-либо реализации и назвал его «WebView». В моем коде мне нужно иметь возможность динамически создавать объекты этого класса, используя NSClassFromString.WebView запрещенное имя класса для iOS?

Несмотря на то, что это похоже на тривиальное произведение, у меня возникают проблемы с этим конкретным именем класса «WebView». Это швы вроде NSClassFromString() не подходит для данного имени класса, но с lldb я могу печатать описания класса 1 и класса 2, и для обоих он говорит «WebView».

Кто-нибудь еще испытывает такую ​​же проблему? Есть ли список запрещенного имени класса, например, переменные и т. Д.?

@interface WebView : NSObject 
@end 

@implementation WebView 
@end 

@implementation ViewController 
- viewDidLoad { 
    Class class1 = [WebView class]; 
    Class class2 = NSClassFromString(NSStringFromClass(class1)); 

    NSAssert(class1 == class2, @"Classes not equal"); // FAIL 
} 
@end 

И еще один пример:

[class1 new]; // OK 
[class2 new]; // EXC_BAD_ACCESS (code=2, address=0x0) 
+6

WebView - это частный класс, используемый в UIWebView внутренне, что может вызвать проблемы ... – Vladimir

ответ

3

enter image description here

Когда я пытаюсь выделить WebView. Он просматривает внутреннюю структуру Apple, как показано на изображении.

0

Вы должны всегда использовать три буквенный префикс для ваших классов, чтобы избежать конфликтов, как это. Apple резервирует все два префикса для себя.

При создании вашего проекта в Xcode он даже спросит вас, какой префикс вы хотели бы использовать, и он создаст новые классы, используя этот префикс для вас.

+0

Это не совсем так. Apple рекомендует использовать трехбуквенные префиксы, но резервирует только несколько с двумя буквами (например, NS, UI, AB, CA, CI). – tilo

+0

Довольно уверены, что они резервируют все два префикса букв, потому что они могут начать использовать новые префиксы в будущих версиях ОС. Те, которые вы перечисляете, являются только примерами, которые они включают в документы: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Conventions/Conventions.html Но, конечно, они используют другие CM -> Core Motion, CG -> Core Graphics, SK -> Sprite Kit (пример нового префикса, который они только что добавили в iOS 7). –

0

WebView - это класс приложения apple sdk. Когда я использовал UIWebView, я видел веб-класс как предок UIWebView. Таким образом, не используйте класс с именем WebView, это имя использует яблоко.

Смежные вопросы