小编Geo*_*own的帖子

iOS 11 - 核心数据 - UIColor no longers作为可转换属性

我使用可转换属性将颜色存储在我的二进制Core Data存储中,将属性的类指定为UIColor,如下所示:

#import "CoreDataEntity+CoreDataClass.h"
#import <UIKit/UIKit.h>


NS_ASSUME_NONNULL_BEGIN

@interface CoreDataEntity (CoreDataProperties)

+ (NSFetchRequest<CoreDataEntity *> *)fetchRequest;

@property (nullable, nonatomic, retain) UIColor *transformable;
@property (nullable, nonatomic, copy)   NSString *string;

@end

NS_ASSUME_NONNULL_END
Run Code Online (Sandbox Code Playgroud)

在iOS 11 Beta中,这已经停止了这样的错误:

NSUnderlyingException=value for key 'NS.objects' was of unexpected class 'UIColor'. Allowed classes are '{(\n    NSDecimalNumber,\n    NSData,\n    NSUUID,\n    NSNumber,\n    NSDate,\n    NSArray,\n    NSOrderedSet,\n    NSDictionaryMapNode,\n    NSString,\n    NSSet,\n    NSDictionary,\n    NSURL,\n    NSNull\n)}'.}";
    NSUnderlyingException = "Can't read binary data from file";
}
Run Code Online (Sandbox Code Playgroud)

我设法在GitHub上的XCode项目中复制特定问题(必须与XCode Beta一起运行两次以获得错误).

在示范项目的存储类型由NSPersistentStoreDescription控制,将其设置为NSBinaryStoreType,这是我在AppDelegate中的exanple项目做,我在应用程序didFinishLaunchingWithOptions添加对象,否则就从核心数据的iOS11应用程序的标准模板.加上一个小的数据模型和类.

如果你运行项目两次,第一次创建数据存储区,一切都很好.第二次,数据存储区尝试打开并崩溃应用程序.如果我使用SQL支持的数据存储区,这个问题似乎只与二进制数据存储区有关.但是,我的应用程序在野外并使用二进制.

我已经向苹果公司报告了它作为一个错误,并在开发者论坛上寻求帮助,但Apple没有承认这个错误,也没有任何帮助.

随着iOS11发布日期的临近而我没有解决方案,我有点担心,我的应用程序只能在iOS11中运行.

我已经尝试将属性更改为NSData并查看是否可以取消归档数据,但它似乎仍然以某种方式内部存储为UIColor,并且数据库无法打开.

任何人都可以看到解决方法吗?我有野外的应用程序,并可能推出更新以转换数据存储区,然后iOS11可以为一些人工作,但这并不能保证所有用户得到修复程序,他们可能会丢失他们的数据.

编辑1:雷达编号:33895450

编辑2:我刚刚发现,这适用于核心数据中的任何可转换属性,错误消息中支持的值只是默认属性类型.

编辑3:出于好奇,我填写了transformable属性的所有字段(以前从未需要).我将"NSKeyedUnarchiveFromData"添加到核心数据实体的值变换器名称中,它应该是默认值,但您永远不会知道.没有效果.无论如何它必须使用值变换器才能知道它是UIColor.我填写自定义类字段为UIColor,没有效果. …

xcode core-data objective-c ios11 macos-high-sierra

10
推荐指数
1
解决办法
947
查看次数

从AVPlayerItemVideoOutput到openGL纹理的最佳路径

一直在试图找出从AVFoundation视频到openGLTexture的当前最佳路径,我找到的大部分内容都与iOS有关,我似乎无法在OSX中使其运行良好.

首先,这是我设置videoOutput的方式:

NSDictionary *pbOptions = [NSDictionary dictionaryWithObjectsAndKeys:
                          [NSNumber numberWithInt:kCVPixelFormatType_422YpCbCr8], kCVPixelBufferPixelFormatTypeKey,
                          [NSDictionary dictionary], kCVPixelBufferIOSurfacePropertiesKey,
                                   nil];
        self.playeroutput   = [[AVPlayerItemVideoOutput alloc] initWithPixelBufferAttributes:pbOptions];
        self.playeroutput.suppressesPlayerRendering = YES;
Run Code Online (Sandbox Code Playgroud)

我正在尝试三种不同的解决方案,其中只有一种似乎能够始终如一地工作,但不确定它是最快的.一个人工作一点点,然后分裂跳跃到整个地方的框架,一个只是产生黑色.

首先,使用glTexImage2D的工作解决方案

- (BOOL) renderWithCVPixelBufferForTime: (NSTimeInterval) time
{
    CMTime vTime = [self.playeroutput itemTimeForHostTime:CACurrentMediaTime()];

    if ([self.playeroutput hasNewPixelBufferForItemTime:vTime]) {
        if (_cvPixelBufferRef) {
            CVPixelBufferUnlockBaseAddress(_cvPixelBufferRef, kCVPixelBufferLock_ReadOnly);
            CVPixelBufferRelease(_cvPixelBufferRef);
        }
        _cvPixelBufferRef = [self.playeroutput copyPixelBufferForItemTime:vTime itemTimeForDisplay:NULL];

        CVPixelBufferLockBaseAddress(_cvPixelBufferRef, kCVPixelBufferLock_ReadOnly);
        GLsizei       texWidth    = CVPixelBufferGetWidth(_cvPixelBufferRef);
        GLsizei       texHeight   = CVPixelBufferGetHeight(_cvPixelBufferRef);
        GLvoid *baseAddress = CVPixelBufferGetBaseAddress(_cvPixelBufferRef);


        glBindTexture(GL_TEXTURE_RECTANGLE_ARB, self.textureName);
        glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_STORAGE_HINT_APPLE , GL_STORAGE_CACHED_APPLE);
        glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGB, texWidth, texHeight, 0, GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, baseAddress); …
Run Code Online (Sandbox Code Playgroud)

opengl macos video avfoundation avplayer

6
推荐指数
1
解决办法
3538
查看次数

升级到XCode 8后,应用程序安装失败

在安装Xcode 8后,我的应用程序将无法在我的设备上安装错误:应用程序安装失败"找不到此可执行文件的有效配置文件."

我在这里看到了很多关于这个问题的问题,我慢慢地经历了所有的答案,但无济于事.我以为它可能是ios10,但是我把我的一个设备放在ios9上,那个也没用.

我做了什么:

  • 我在Xcode之间切换,自动处理签名并手动完成,将所有配置文件设置为"开发".
  • 我已删除所有配置文件并重新加载它们.
  • 我尝试过去开发人员门户网站,手动重新生成配置文件并使用它们.
  • 当我检查XCode托管配置文件旁边的信息时,在"设备"下,列出了我当前的设备.
  • 打开和关闭推送通知服务.(我不使用推送通知).
  • 还在开发门户中的App ID上禁用了推送通知服务.
  • 在"设备"窗口中从设备本身中删除了配置文件.
  • 删除了钥匙串中的所有旧证书.
  • 更新了我所有的可可豆荚.
  • 重新启动了无数次,并在不同的顺序中执行了许多不同的步骤.
  • 我最近不得不打开钥匙串共享,因为我的应用程序不再想从钥匙串中检索用于oAuth的访问令牌,但打开或关闭它也没有任何效果.
  • 除了最近更改的钥匙串访问权限,我没有其他权利.
  • 通过密钥链访问,我还在开发门户中创建了一个应用程序组,并确保它已设置为我的钥匙串组.没有不同

我现在已经被困在这一天了,因为我必须在真实设备上进行测试,它真的推迟了我的下一个版本,当一切都到位时,错误消息令人沮丧地模糊,我错过了某个可能给我的日志文件一个提示?

xcode code-signing ios

6
推荐指数
1
解决办法
6299
查看次数