我无法理解为什么如果我将实现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)
如果我将这个类的实例附加到场景中,触摸对象......没有任何反应.
我忘记了什么吗?
有没有办法SCNNode从COLLADAObject 创建一个启动,然后将该节点添加为rootNode的子节点?
我看到了ScenKit我可以创建一个SCNScene从.dae文件开始使用
[SCNScene sceneWithURL:url options:nil error:&error];
但是我找不到从dae开始创建Node的方法.
我已经创建了我的自定义布局子类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}}.
仅当我的集合视图中有几个单元格时才会发生这种情况。
为什么以及如何获取应显示的所有单元格的属性?
我正在开发一个将核心数据与iCloud一起使用的应用程序(iOS7给出了很大的改进).此应用程序存储数据以使用此信息描述任务:
name 一个 NSString date 一个 NSDateimagea NSString描述了图片的路径顺便说一下,图片可以存储在文档或图书馆目录中(我必须决定哪个是更方便的文件夹)在具有唯一名称的同一文件夹中.
现在我想为图像激活iCloud同步,否则用户的体验将不完整(我只是同步数据库数据..没有图像,应用程序的奇怪/错误行为).
我对Apple文档感到困惑.我无法找到一种方法来准确理解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与用户数据同步.
哪个是执行此类更新的最佳方式?我应该注意什么以及我最应该注意什么?如何迁移当前数据?
我正试图从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) 我想转移到xliff而不是翻译Localizable.strings和Main.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文件中不可用但是:(
假设我有一个简单的链,它从一个 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 文档?
我无法检查NSRect结构是否有值.
if(!myRect)// produce an error
if(myRect== nil) //this's not a pointer...can't works.
Run Code Online (Sandbox Code Playgroud)
哪种方法正确?
我完全陷入了一个可能非常简单的操作......将Sparkle添加到在Xcode 4中创建的项目中.我做了以下操作:
添加到"链接二进制文件库"但它生成了此错误:
dyld:未加载库:@loader_path /../ Frameworks/Sparkle.framework/Versions/A/Sparkle引自:/ Users/me/Library/Developer/Xcode/DerivedData/MyApp-esurnmkwvxcgcxbbrdgsobkoimfv/Build/Products/Release/Myapp .应用程序/内容/ MacOS的/ MyApp的
原因:找不到图像
当我启动我的应用程序时,我收到一个警告:
Unknown class 'SUUpdater', using 'NSObject' instead. Encountered in Interface Builder file at path /Users/...etcetcetc
Run Code Online (Sandbox Code Playgroud)
显然由于这个警告,更新程序永远不会启动.我错过了什么?