Неопределенные символы для архитектуры в Xcode / Objective- C - PullRequest
0 голосов
/ 16 марта 2020

Я хотел провести рефакторинг моего iOS приложения, написанного на Objective- C. Я создал новый класс Utility (файлы Utility.h и Utility.m).

Это мой заголовок Utility.h (Тип: по умолчанию C Заголовок)

//  Utility.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h> 
NSAttributedString *attributedTitle(NSString *title);

Это мой файл реализации Utility.m (Тип: По умолчанию - Цель- C Источник )

 // Utility.m
 #import "Utility.h"
 NSAttributedString *attributedTitle(NSString *title) {
    NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:title];
    return attributedTitle;
}

Этот файл является членом моей цели и добавлен в «Этапы сборки -> Источник компиляции» (фактически первый файл). Foundation и UIKit также связаны между собой.

Я использую этот метод в другом файле Objective- C:

// OtherClass.m
#import "OtherClass.h"
#import "Utility.h"
@implementation OtherClass
- (id)init {
    self = [super init];
    if (self) {
         NSAttributedString *string = attributedTitle(@"hello");
         NSLog(@"%@", string);
    }
    return self;
}
@end

Этот файл .m также является членом моей цели. Я получаю ошибку

Undefined symbols for architecture x86_64 "_attributedTitle", referenced from:
          -[OtherClass.m init] in OtherClass.o

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Реализация класса Utility выглядит как C, но это не правильно. Вы его скомпилировали?

Я предлагаю переопределить Utility и изменить метод на метод класса. как это

// Utility.h
+ (NSAttributedString *)attributedTitle:(NSString *title);
// Utility.m

+ (NSAttributedString *)attributedTitle:(NSString *title) {
    NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:title];
    return attributedTitle;
}

Когда вы используете его, вы можете использовать его вот так

NSAttributedString *string = [Utility attributedTitle:@"hello"];
0 голосов
/ 16 марта 2020

Я чувствую себя очень уверенным, несмотря на ваши заявления об обратном, что то, что я сказал в своем первом комментарии, правильно: Utility.m не является частью цели приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...