繁体   English   中英

Xcode / Objective-C 中未定义的架构符号

[英]Undefined symbols for architecture in Xcode / Objective-C

我想重构我用 Objective-C 编写的 iOS 应用程序。 我创建了一个新的类 Utility(文件 Utility.h 和 Utility.m)。

这是我的标题 Utility.h(类型:默认 C 标题)

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

这是我的实现文件 Utility.m(类型:默认 - Objective-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

我非常肯定,尽管您的说法相反,但我在第一条评论中所说的是正确的: Utility.m不是应用程序目标的一部分。

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"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM