Подтвердить что ты не робот

Расширения и рамки классов

У меня есть собственная структура, содержащая полезные классы/методы, которые я часто использую в своих приложениях. Недавно я добавил расширение класса для NSString "NSString + Extensions.h/m", чтобы добавить свои собственные методы. Пример:

  • NSString + Extensions.h
@interface NSString (Extensions)
- (NSString *)removeDiacritics; 
@end
  • NSString + Extensions.m
#import "NSString+Extensions.h"

@implementation NSString (Extensions)

- (NSString *)removeDiacritics
{ 
    return [[[NSString alloc] initWithData:[self dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding] autorelease];
}

@end

Я успешно скомпилирую свою фреймворк. Но когда я пытаюсь использовать одну из функций этого расширения класса в любом приложении:

  • AppDelegate.m
// CUtils is the name of the framework. CUtils.h contains #import of all header files
// contained in my framework
#import <CUtils/CUtils.h>


  @implementation AppDelegate

    ...

    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
        /*
         Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previouslyin the background, optionally refresh the user interface.
         */

        NSString *toto = @"Je suis une chaîne avec des caractères spéciaux";
        NSLog(@"%@", toto);
        NSLog(@"%@", [toto removeDiacritics]);
    }

...

Я получаю следующую ошибку:

2012-01-31 17: 01: 09.921 TestCUtils [4782: 207] Je suis une chaîne avec des caractères spéciaux 2012-01-31 17: 01: 09.924 TestCUtils [4782: 207] - [__ NSCFConstantString removeDiacritics]: непризнанный селектор, отправленный в экземпляр 0x340c

Но если я добавлю расширение своего класса непосредственно в приложение (вне моей рамки), он отлично работает...

Любые подсказки?

** РЕДАКТИРОВАТЬ **

Как некоторые из вас спросили, я добавил опции -all_load и -ObjC в "Other Linker Flags", но проблема остается.

enter image description here

4b9b3361

Ответ 1

Посмотрите на этот технический Q & A, который объясняет опции -ObjC и -all_load, которые упоминает @Ell Neal.

Примечание Параметры компоновщика должны быть установлены в проекте, который связывает фреймворк (т.е. клиент фреймворка) не сам фрейм. На скриншоте похоже, что вы устанавливаете параметр в своем проекте framework, потому что я вижу исходный файл NString+Extensions.m слева.

Ответ 2

Вам нужно добавить -ObjC к другим флагам компоновщика в настройках сборки. Если это не сработает, попробуйте добавить -all_load

Ответ 3

Похоже, вам нужно #import "NSString+Extensions.h" в AppDelegate.m