Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
今天,小部件在iOS 8设备上没有内容_Ios_Objective C_Iphone_Widget_Ios8 Today Widget - Fatal编程技术网

今天,小部件在iOS 8设备上没有内容

今天,小部件在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方法,以查看它们是否被正确调

我正在尝试为我现有的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{}