今天,小部件在iOS 8设备上没有内容
我正在尝试为我现有的iOS 7+应用程序创建一个今日扩展(又名Widget)。在iOS模拟器中,一切正常(大多数情况下),但在我的设备上,小部件是空的——只显示标题/名称,而不显示内容 我发现有几个线程处理类似的问题,但它们都与Swift应用程序中的一些init问题有关。我使用的是Objective-c,而不是Swift 这就是我所做的:今天,小部件在iOS 8设备上没有内容,ios,objective-c,iphone,widget,ios8-today-widget,Ios,Objective C,Iphone,Widget,Ios8 Today Widget,我正在尝试为我现有的iOS 7+应用程序创建一个今日扩展(又名Widget)。在iOS模拟器中,一切正常(大多数情况下),但在我的设备上,小部件是空的——只显示标题/名称,而不显示内容 我发现有几个线程处理类似的问题,但它们都与Swift应用程序中的一些init问题有关。我使用的是Objective-c,而不是Swift 这就是我所做的: 在我的应用程序中添加了新的今日扩展目标。相应的 方案也是自动创建的 当使用未更改的默认小部件时,也会出现此问题。我只添加了init方法,以查看它们是否被正确调
Hello-World
标签@interface TodayViewController () <NCWidgetProviding>
@end
@implementation TodayViewController
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self)
NSLog(@"initWithCoder");
return self;
}
- (id)init {
self = [super init];
if (self)
NSLog(@"init");
return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
NSLog(@"initWithNibName");
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
// Perform any setup necessary in order to update the view.
// If an error is encountered, use NCUpdateResultFailed
// If there's no update required, use NCUpdateResultNoData
// If there's an update, use NCUpdateResultNewData
completionHandler(NCUpdateResultNewData);
}
@end
@今日界面视图控制器()
@结束
@今日视图控制器的实现
-(id)initWithCoder:(NSCoder*)aDecoder{
self=[super initWithCoder:aDecoder];
如果(自我)
NSLog(@“initWithCoder”);
回归自我;
}
-(id)init{
self=[super init];
如果(自我)
NSLog(@“init”);
回归自我;
}
-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil{
self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
如果(自我)
NSLog(@“initWithNibName”);
回归自我;
}
-(无效)viewDidLoad{
[超级视图下载];
//从nib加载视图后,执行任何其他设置。
}
-(无效)未收到记忆警告{
[超级记忆警告];
//处置所有可以重新创建的资源。
}
-(void)widgetPerformUpdateWithCompletionHandler:(void(^)(NCUpdateResult))completionHandler{
//执行任何必要的设置以更新视图。
//如果遇到错误,请使用NCUpdateResultFailed
//如果不需要更新,请使用NcUpdateResultNodeData
//如果有更新,请使用NCUpdateResultNewData
completionHandler(NCUpdateResultNewData);
}
@结束
选择小部件方案并在模拟器中运行时,在选择“今天”作为容器后,小部件将正确显示。此外,还会记录initWithCoder
当一开始在设备上运行时,一切都按照预期运行:今天屏幕出现,小部件显示出来。我的小部件也是,但没有任何内容
然后,Xcode显示以下消息:
与“测试设备”的连接中断-将连接恢复到“测试设备”
重新安装并运行“com.example.MyApp.Widget”,或者
“com.example.MyApp.Widget”仍在运行,您可以通过
选择调试>附加到进程>com.example.MyApp.Widget
没有记录任何内容,我想这是因为连接中断。但是为什么小部件是空的
我查看了设备日志,但没有崩溃。我的iPhone6(iOS 8.0)和iPadAir 2(iOS 8.1)也存在同样的问题
多谢各位 添加
self.preferredContentSize = CGSizeMake(320, 60);
到
在扩展名的viewcontroller.m中
这个方法解决了我的问题
我希望它也能对你有所帮助。经过几天的搜索,我终于找到了解决方案: 我的项目(包含小部件的应用程序)和小部件本身不包括arm64体系结构。正如所述,这不是一个有效的配置: 链接到嵌入式框架的包含应用程序必须包含 arm64(iOS)或x86_64(OS X)体系结构构建设置,否则将 被应用商店拒绝。(如创建应用程序扩展中所述, 所有应用程序扩展必须包括适当的64位体系结构 生成设置。) 当x64丢失时,应用程序不仅会被拒绝,而且会阻止小部件首先出现 我将小部件添加到一个尚未为x64配置的现有项目中,并且似乎相同的构建设置已自动应用于小部件。如果Xcode显示有关此问题的任何警告或提示,它将避免大量工作 为了解决这个问题,我做了以下工作:
- 单击项目导航器中的项目条目并选择应用程序目标
- 选择
选项卡并导航到buildsettings
部分architecture
- 将
体系结构设置为
标准体系结构(armv7、arm64)
- 将
设置为Valid architecture
armv7 armv7s armv8 arm64
- 将
设置为仅构建活动架构
否
- 将相同的设置应用于小部件目标
在此之后,小部件在模拟器和我的测试设备上都能正常工作。很抱歉延迟了反馈。不幸的是,在我的情况下,这并没有改变任何东西。确切地说,这在iOS 8上并不是一个问题,因为它在iPhone4S上运行得很好。问题在于包含完整64位处理器的设备,这意味着5S和更新版本以及iPad Air和更新版本。。
-(void)viewdidload{}