小编Mat*_*oal的帖子

SKSpriteNode子类并触及事件

我无法理解为什么如果我将实现UIResponder协议的SKSpriteNode子类化,则从未调用与触摸相关的方法.

例如,这是一个非常简单的类,我正在使用它作为测试:

//INTERFACE ----------------
#import <SpriteKit/SpriteKit.h>

@interface TestClass : SKSpriteNode

@end

//IMPLEMENTATION -----------
#import "TestClass.h"

@implementation TestClass


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
     NSLog(@"oook");
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{}

@end
Run Code Online (Sandbox Code Playgroud)

如果我将这个类的实例附加到场景中,触摸对象......没有任何反应.

我忘记了什么吗?

ios sprite-kit

3
推荐指数
1
解决办法
4289
查看次数

SceneKit和COLLADA对象

有没有办法SCNNodeCOLLADAObject 创建一个启动,然后将该节点添加为rootNode的子节点?

我看到了ScenKit我可以创建一个SCNScene.dae文件开始使用

[SCNScene sceneWithURL:url options:nil error:&error];

但是我找不到从dae开始创建Node的方法.

macos ios scenekit

3
推荐指数
1
解决办法
2658
查看次数

自定义 UICollectionViewLayout:layoutAttributesForElementsInRect 要求非常小的矩形

我已经创建了我的自定义布局子类UICollectionViewLayout。它完全按照我的需要工作,但是当集合只有少量元素(如“3”)时,该方法会layoutAttributesForElementsInRect询问带有0 width.

这是我的 layoutAttributesForElementsInRect 实现的代码:

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{

    NSMutableArray *results = [NSMutableArray array];

    for (UICollectionViewLayoutAttributes *attributes in self.elementsAttributes) {

        if(CGRectIntersectsRect(rect, attributes.frame)){
            [results addObject:attributes];
        }
    }

    return results;
}
Run Code Online (Sandbox Code Playgroud)

我在prepareLayout方法中缓存了属性......所以例如我有 3 个元素,但是rect我从前一个函数收到的参数只是“不可能”,确实是:{{0, 0}, {0, 180}}.

仅当我的集合视图中有几个单元格时才会发生这种情况。

为什么以及如何获取应显示的所有单元格的属性?

ios uicollectionview

3
推荐指数
1
解决办法
1449
查看次数

带有核心数据和文件同步的iCloud

我正在开发一个将核心数据与iCloud一起使用的应用程序(iOS7给出了很大的改进).此应用程序存储数据以使用此信息描述任务:

  • name 一个 NSString
  • date 一个 NSDate
  • imagea NSString描述了图片的路径

顺便说一下,图片可以存储在文档或图书馆目录中(我必须决定哪个是更方便的文件夹)在具有唯一名称的同一文件夹中.

现在我想为图像激活iCloud同步,否则用户的体验将不完整(我只是同步数据库数据..没有图像,应用程序的奇怪/错误行为).

我对Apple文档感到困惑.我无法找到一种方法来准确理解iCloud数据如何满足这种需求.我只想在创建文件夹时立即同步它们的每个文件.所以我的问题是:

  • 您可以分享一些很好的资源来学习如何使用iCloud进行文件同步
  • 我是否要使用UIDocument和其他iCloud API?还是有"自动"的东西.相当新的再见/愚蠢的问题,我知道:(
  • 在同一个应用程序中使用基于Core Data和Document的iCloud synch是否有任何问题?

注意:我知道我可以通过在文档文件夹中添加文件来同步数据,并希望用户激活文档同步...但这显然不是我想要的.

core-data ios icloud

3
推荐指数
1
解决办法
1911
查看次数

使用下一个App版本更新Core Data + iCloud模型

我必须处理使用Core Data和iCloud的下一个应用程序版本.iCloud已使用最"现代"的方式在当前版本中激活:

if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                                   configuration:@"data_cfg"
                                                             URL:storeURL
                                                         options:@{NSPersistentStoreUbiquitousContentNameKey:@"theStore"}
                                                           error:&error]) 
Run Code Online (Sandbox Code Playgroud)

现在我需要更新商店结构,添加新的实体,关系等......

我完全陷入困境,因为我不知道更新模型的更好方法是知道iCloud与用户数据同步.

哪个是执行此类更新的最佳方式?我应该注意什么以及我最应该注意什么?如何迁移当前数据?

migration upgrade core-data ios icloud

3
推荐指数
2
解决办法
417
查看次数

ApplicationContext属性始终返回空字典

我正试图从a获取最新数据WCSession,我无法理解为什么即使我刚接到didReceiveApplicationContext电话.更多详细信息可直接在代码中找到:

//Watch Code

override func awakeWithContext(context: AnyObject?) {
    super.awakeWithContext(context)
    if (WCSession.isSupported()) {
        session = WCSession.defaultSession()
        session?.delegate = self
        session?.activateSession()
        verifyUser()
    }
}

// 1. This function is called, with the applicationContext data 
func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
    print("CONTEXT \(applicationContext)")
}

// 2. I manually trigger this call from the watch with a button.
// even if I call this function after the previous function (1) it always print an Empty ([:]) applicationContext. …
Run Code Online (Sandbox Code Playgroud)

watchkit watchconnectivity

3
推荐指数
1
解决办法
406
查看次数

带有NSLocalizedString的XLIFF文件,键和长字符串

我想转移到xliff而不是翻译Localizable.stringsMain.strings文件,但我发现我使用NSLocalizedString的方式不正确(我实际做了5年......).

我不喜欢将翻译直接放在我的代码中,所以我使用通用密钥而不写任何评论:

NSLocalizedString("general.error", comment: "")

然后我将字符串包含在Localizable.strings中

"general.error" = "An error occured";

到目前为止一切都很好(也许).现在,当我导出xliff文件时,我发现它source只是我的通用密钥,显然翻译人员无法猜测target该密钥的写入内容:/

所以我的问题是:唯一的解决方案是将所有翻译直接移到内部NSLocalizedString吗?

NSLocalizedString("An error occured", comment: "")

或者在评论中......(我真的不喜欢这个解决方案)

如果字符串真的很长怎么办?将一行3行直接放入代码中似乎很奇怪:/

还有其他有趣的解决方案吗?

编辑

我已经尝试过使用常量,但似乎这个解决方案在swift中不起作用.我创建了一个String.swift文件,我添加了常量:

let thisIsMyLonStringID = "An here I can put the long translation";

我可以这样使用它:

NSLocalizedString(thisIsMyLonStringID, comment: "")

当我导出到XLIFF时,此字符串在xliff文件中不可用但是:(

cocoa translation localization ios xliff

3
推荐指数
1
解决办法
468
查看次数

Swift 组合链错误中的 Swift `Failure` 关键字含义

假设我有一个简单的链,它从一个 HTTP 请求创建一个发布者 <T, APIManagerError>

   func run<T:Decodable>(request:URLRequest)->AnyPublisher<T, APIManagerError>{
        return URLSession.shared.dataTaskPublisher(for: request)
            .map{$0.data}
            .decode(type: T.self, decoder: JSONDecoder())
            .eraseToAnyPublisher()// it should run mapError before this point
    }
Run Code Online (Sandbox Code Playgroud)

此代码产生此错误,因为我返回的是 Error 而不是APIManagerError.

Cannot convert return expression of type 
'AnyPublisher<T, Publishers.Decode<Upstream, Output, Coder>.Failure>' 
(aka 'AnyPublisher<T, Error>') 
to return type 'AnyPublisher<T, RestManagerError>'
Run Code Online (Sandbox Code Playgroud)

我知道要解决这个问题,我需要在.decode.

.mapError{error in 
    APIManagerError.error("Decode Fail")
}
Run Code Online (Sandbox Code Playgroud)

但我无法真正理解在“aka”部分之前的错误消息报告了什么,而是非常清楚

你如何阅读错误Publishers.Decode<Upstream, Output, Coder>.Failure?具体是什么意思.Failure?我Failure在哪里可以找到Swift 文档?

swift combine

3
推荐指数
1
解决办法
1074
查看次数

检查NSRect是否为空

我无法检查NSRect结构是否有值.

if(!myRect)// produce an error
if(myRect== nil) //this's not a pointer...can't works.
Run Code Online (Sandbox Code Playgroud)

哪种方法正确?

macos cocoa

2
推荐指数
2
解决办法
3516
查看次数

在Xcode 4中添加Sparkle框架

我完全陷入了一个可能非常简单的操作......将Sparkle添加到在Xcode 4中创建的项目中.我做了以下操作:

  • 将Sparkle.framework添加到我的项目中(拖放)
  • 添加到"链接二进制文件库"但它生成了此错误:

    dyld:未加载库:@loader_path /../ Frameworks/Sparkle.framework/Versions/A/Sparkle引自:/ Users/me/Library/Developer/Xcode/DerivedData/MyApp-esurnmkwvxcgcxbbrdgsobkoimfv/Build/Products/Release/Myapp .应用程序/内容/ MacOS的/ MyApp的

    原因:找不到图像

  • 删除"链接二进制文件库"
  • 添加到"复制捆绑资源"
  • 在SUUpdater上添加一个实例到mainMenu.xib
  • 是否需要每个配置步骤(创建私钥,上传文件和RSS等...)

当我启动我的应用程序时,我收到一个警告:

Unknown class 'SUUpdater', using 'NSObject' instead. Encountered in Interface Builder file at path /Users/...etcetcetc
Run Code Online (Sandbox Code Playgroud)

显然由于这个警告,更新程序永远不会启动.我错过了什么?

cocoa sparkle xcode4

2
推荐指数
1
解决办法
1647
查看次数