小编Lea*_*s2D的帖子

Objective-C运行时:检查类是否符合协议的最佳方法?

我有一个类(但没有实例),需要知道它是否符合某个协议.但是,Class可以多次子类化,class_conformsToProtocol()忽略在超类上声明的协议.

我可以使用class_getSuperclass()并递归检查层次结构中的所有类,直到超类为nil.但是,我想知道这对于深层嵌套的类层次结构来说是否效率低下,也许有更好的方法可以做到这一点?

换句话说,如何使用Objective-C运行时方法最好地实现NSObject方法conformsToProtocol,以便在超类上找到协议?

 [myObject conformsToProtocol:@protocol(MyProtocol)];
Run Code Online (Sandbox Code Playgroud)

如果我在正确的轨道上以递归方式上升类层次结构,请告诉我.

runtime objective-c

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

如何在GitHub上设置私有Git存储库?它甚至可能吗?

我打算仅以邀请方式将我的源代码分享给几十个用户.源代码本身不应该是公开的.允许并鼓励参与者提交更改.所以我需要源代码控制,最好是Git,托管在具有多个用户的私有访问级别的公共服务器上.

我了解到可以在GitHub上设置使用https://链接的私有git存储库.在GitHub本身,这样的项目不会出现在搜索中.对于参与的用户,项目显示"锁定"图标.所以显然有私人存储库,我只是不知道如何设置一个.许多教程使用SSH来设置私有存储库,但它们都要求您拥有"自己的服务器".

推送/拉动源代码时我不关心安全连接,也不关心GitHub的信任问题.我所关心的只是私人存储库,只能访问我邀请的用户.也许我很天真,这样的解决方案只能通过商业主机(例如Unfuddle,Assembla)获得,但如果没有,我真的很想知道它是如何完成的!

git github

83
推荐指数
7
解决办法
11万
查看次数

Xcode自定义构建配置导致静态库"找不到库/文件"

我有一个工作区,其中包含一个项目,该项目链接到另一个项目中的静态库(也在工作区中).这是Kobold2D中的一个问题我无法解决,即使我理解原因,我想它与这个问题类似.

项目目标和静态库目标都具有DebugRelease构建配置.一切都很好.

现在,有人在项目中添加了新的构建配置,并将其命名为Ad-Hoc.现在,项目的目标构建了Ad-Hoc配置,但是静态库没有这样的配置.显然,他们默认构建Release配置.

最后,当链接器应该将所有内容组合在一起时,它会失败:

ld: library not found for -lbox2d-ios
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang++ failed with exit code 1
Run Code Online (Sandbox Code Playgroud)

对于通过-force_load $(BUILT_PRODUCTS_DIR)/libSomeLib.a错误强行加载的库类似但是说"找不到文件".我应该注意,库"libbox2d-ios.a"位于"带库的链接二进制"构建阶段列表中.

显然问题是链接器假设这些库位于BUILT_PRODUCTS_DIR中的Ad-Hoc-iphoneos文件夹中,而它们实际上位于Release-iphoneos文件夹中,因为它们没有Ad-Hoc构建配置.

我怎么能把连接器打到脸上并告诉他把它们放在哪里呢?最好是我正在寻找适用于这两种情况的解决方案,即库添加标准方式(链接二进制文件库构建阶段)和需要额外-force_load才能工作的库.

我希望有一些方法可以:

  • 强制库放在应用程序目标的构建配置文件夹中
  • 运行一个后编译和预链接脚本,将每个库复制到构建配置文件夹
  • 指定库的相对路径
  • 使用$ BUILT_PRODUCTS_DIR以外的其他宏来执行-force_load
  • 像-WTFmake-all-problems-go-away这样的链接器标志

对不起,但我不得不这样说...... ARGH!:)

linker build static-libraries xcode4

43
推荐指数
5
解决办法
1万
查看次数

导入ObjC框架时,Swift调试器不显示变量值

当我使用Sprite Kit创建一个新的OS X"Game"项目,并在任何地方设置断点时,我可以看到变量值就好了:

在此输入图像描述

然后我更改代码以导入我自己的框架(TilemapKit),这是一个纯粹的Objective-C框架:

import SpriteKit
import TilemapKit

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {
        print("dang!")
    }
}
Run Code Online (Sandbox Code Playgroud)

没有其他变化.我甚至没有使用任何TilemapKit代码.当断点触发时,我看到:

在此输入图像描述

就观察变量值而言,整个项目停止可调试.这种行为完全一致.没有框架导入,我可以再次调试.

由于我使用Xcode 7 beta(7A121l)和OS X 10.11开发人员预览版,我知道这可能只是一个(临时)错误.

命令行Tiles设置为使用Xcode 7.0版本btw.我尝试在框架目标中启用模块,确保部署目标相同(10.11),禁用符号剥离.我在其中添加了一个Bridging Header和#imported TilemapKit框架(在这种情况下删除Swift导入仍然会给我不可调试的应用程序,所以我导入框架的方式和位置似乎并不重要).

有没有人建议什么可能导致这种行为以及我如何解决这个问题 - 或者至少我如何尝试缩小问题?

罪魁祸首是否更有可能与项目的框架构建设置相关联?我是否需要在应用程序项目中启用某些内容以使其与ObjC框架兼容?(我已在其他链接器标志中获得-ObjC)


更新:

我跑进po self调试控制台,发现了这个通知:

<built-in>:3:6: error: module 'TilemapKit' was built in directory '/TilemapKit.framework' but now resides in directory './TilemapKit.framework'
#define __clang_major__ 7
     ^
missing required module 'TilemapKit'
Debug info from this module will be unavailable in the debugger.
Run Code Online (Sandbox Code Playgroud)

为什么框架构建目录发生了变化?那为什么会这么重要以及如何解决这个问题?

PS:新的ObjC应用程序中的相同框架可以调试得很好.

debugging xcode frameworks swift2 xcode7-beta2

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

Xcode 5:如何启用"重新打开上一个项目/窗口"?

我很难过.Xcode 5 - 仅限最终版本和公共版本 - 在重新启动Xcode时将不再自动重新打开以前打开的项目.此功能始终用于工作,包括Xcode 5 GM种子.

我在"系统偏好设置"中找不到有关"打开最后一个窗口"或类似内容的任 它曾经在General页面上.这就是我的版本中的所有内容:

在此输入图像描述

有谁知道如何重新启用此功能,你能否确认它已消失?或者我有一个破碎的Xcode?

xcode xcode5

32
推荐指数
1
解决办法
5523
查看次数

背景图像大小精灵套装游戏

我刚开始一个新的Sprite Kit项目来学习如何使用它.我观看并阅读了很多教程,但没有教程可以解答我的问题/问题.

我想为我的iPhone 5S创建一个应用程序.因此屏幕尺寸为1136x640.我为我的应用程序创建了一个1136x640背景图像.但是,当我将图像添加到我的应用程序时,它可能会变大!iOS模拟器只显示图像的中间部分.

有人能告诉我我必须使用什么屏幕尺寸以及为什么?

非常感谢!

这是我从教程中复制的代码.代码位于initWithSize方法的myScene.m文件中

        SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"myBackground"];
    background.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame));

    [self addChild:background];
Run Code Online (Sandbox Code Playgroud)

编辑:

我在谷歌搜索并发现了这个:

必须使用"viewWillLayoutSubviews"更改viewDidLoad方法.

这是这个方法:

    - (void)viewWillLayoutSubviews
    {
    [super viewWillLayoutSubviews];

    // Configure the view.
    SKView * skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

    // Create and configure the scene.
    SKScene * scene = [MyScene sceneWithSize:CGSizeMake(skView.bounds.size.width*2,skView.bounds.size.height*2)];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    // Present the scene.
    [skView presentScene:scene];
}
Run Code Online (Sandbox Code Playgroud)

起初,scene = MySceneWithSize行是:

SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
Run Code Online (Sandbox Code Playgroud)

但那时只是iPhone 5屏幕尺寸的一半(568x320).所以我不得不加倍大小.有人知道为什么吗?

iphone ios sprite-kit

30
推荐指数
4
解决办法
3万
查看次数

检测UIGestureRecognizer的上,下,左,右Cocos2d

我有一个CCSprite,我想用手势移动.问题是我对Cocos2D完全不熟悉.我希望我的精灵在手势开始时执行一个动作,在手势停止时执行另一个动作,在手势正确时执行另一个动作,对左手执行相同操作.有人能指出我正确的方向吗?

谢谢!

iphone xcode cocos2d-iphone uigesturerecognizer

26
推荐指数
4
解决办法
4万
查看次数

Sprite Kit和播放声音会导致应用程序终止

使用ARC

只是我遇到的一个问题 - 我有一个SKScene,我在其中使用SKAction类方法播放声音fx

[SKAction playSoundFileNamed:@"sound.wav" waitForCompletion:NO];
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试去背景时,无论声音结束,显然iOS正在终止我的应用程序gpus_ReturnNotPermittedKillClient.

现在只有当我评论这一行并且没有运行动作时,iOS才能在后台运行它(当然,暂停,但没有终止).

我究竟做错了什么?

编辑:如果没有运行,iOS将不会终止应用程序 - 例如,如果它if statement没有运行(soundOn == YES)或类似的东西,当布尔是false

audio opengl-es multitasking ios sprite-kit

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

iOS模拟器游戏运行速度非常慢(低fps)

潜入精灵套件(xcode 5).我正在使用两个示例程序,1.创建新项目时包含的默认太空船示例和2.我下载的冒险游戏.

在iOS模拟器中运行这些示例(似乎并不重要).每种帧的帧速率都非常糟糕.如果我在太空船/你好世界的例子中只添加了30个旋转太空飞船,FR会迅速从60 FPS下降到(Ug)12 FPS.

再次,在iOS Sim中运行的Adventure Game示例以10-20 FPS的尖叫速度运行(取决于正在进行的操作).

Apple是否认真对待这些游戏示例?Sprite Kit似乎是垃圾 - 我认为问题是程序员使用Texture Atlas的方式,或者是Sprite Kit(API)处理它们的方式.

有人帮我理解或修复它吗?

在Mavericks,Mac Mini下运行xcode 5 - 我在Unity3D中编程并且在那里没有问题,特别是使用2DToolkit只有30个对象.

xcode objective-c ios sprite-kit

25
推荐指数
1
解决办法
9240
查看次数

我应该将CCSprite,CCNode或NSObject子类化吗?

我看到某些文本似乎总是将CCSprite子类化.我在某个地方读到这样做并不好,最好从基本的东西开始.我想知道专业游戏开发者在游戏结构方面做了些什么.这是CCSprite的子类或在NSObject类ETC中添加CCSprite.

我希望我的问题有道理.

cocos2d-iphone ios

24
推荐指数
3
解决办法
5458
查看次数