【问题标题】:Accessing a method from other target to Today Extension?访问从其他目标到 Today Extension 的方法?
【发布时间】:2015-12-26 01:15:19
【问题描述】:

我有一个带有两个目标的 iOS 应用程序:主(应用程序)和今天的扩展小部件。在主要目标中,我有一个名为“TimetablesInformation”的类,如果我从自己的目标中调用该类的方法,一切都会正常进行。但是,如果我尝试从另一个目标(小部件)访问该类:

TimetablesInformation *info = [[TimetablesInformation alloc] init];
[info getTimes:@"1" forLine:lineName];

它因代码错误而崩溃:

2015-12-26 01:48:04.420 Closer Times[15689:307103] __extensionContextClass != nil - 
/BuildRoot/Library/Caches/com.apple.xbs/Sources/libextension/libextension
82/libextension/Common/NSExtensionContext.m:164: Unable to find
NSExtensionContextClass (_NCWidgetExtensionContext) in extension bundle -
did you link the framework that declares the extension point?

TimetablesInformation 针对 Xcode 右侧检查器上的两个目标...所以我不知道我做错了什么...请您帮帮我吗?

编辑: getTimes 方法: -(NSArray *)getTimes:(NSString *)actualView forLine:(NSString *)lineName {

if ([actualView isEqual: @(1)]){
    if ([lineName  isEqual: @"Point A - Point B"]) {
        self.workingDayTimesArray = @[@"07:00",@"07:30",@"08:00",@"08:30",@"09:00",@"09:30",@"10:00", @"10:30",@"11:00",@"11:30",@"12:00",@"12:30",@"13:00",@"13:30", @"14:00",@"14:30",@"15:00",@"15:30",@"16:00",@"16:30",@"17:00", @"17:30",@"18:00",@"18:30",@"19:00",@"19:30",@"20:00",@"20:30", @"21:00",@"21:30",@"22:00",@"22:30"];
   }
}

我尝试过使用 void 方法,但我遇到了同样的错误。如果我从另一个目标(主应用程序)调用方法,我没有崩溃,但如果我从我的小部件中调用,是的。你知道原因吗?

【问题讨论】:

  • 发布 getTimes 方法以及 lineName 是什么。
  • 您是否为应用程序和小部件启用了该类的目标成员资格?
  • 代码很完美,我刚刚删除了目标,创建了一个新目标,现在它可以工作了... Xcode 之谜...
  • 你必须链接 NotificationCenter.framework
  • 我也是。我删除了 TodayExtension 并再次添加它,它再次工作......

标签: ios objective-c today-extension


【解决方案1】:

这意味着您或某人不小心从您正在运行的目标中删除了框架或库。

就我而言,当有人从“常规”选项卡中的“链接框架和库”或“构建阶段”选项卡中的“使用库链接二进制文件”中删除 NotificationCenter.framework 时,我遇到了这个崩溃错误。因此,要修复它,您只需再次添加它,一切都会正常工作。

因此,当您重新创建 TodayExtension 目标时,它默认链接 NotificationCenter.framework。这就是为什么在此之后一切都为您工作的原因。

【讨论】:

  • 是的,您必须在 Today 扩展中明确链接到 NotificationCenter。我删除了 NotificationCenter,认为我的扩展代码中的导入语句会像我的应用程序目标一样自动包含它,但事实并非如此。
  • 我与“_extensionContextClass”发生了类似的崩溃,并向应用扩展添加了适当的框架(在我的例子中,UserNotifications.framework 和 UserNotificationsUI.framework 用于通知内容应用扩展)阻止了崩溃!
猜你喜欢
  • 2014-11-17
  • 1970-01-01
  • 2017-11-21
  • 2017-06-07
  • 2012-08-20
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 2010-12-12
相关资源
最近更新 更多