2012-06-22 51 views
0

我在iOS/Kobold2d项目中使用CCBigImage,因为精灵会太大而无法一次加载。不幸的是,当执行应用程序时,它停止与为什么我的Kobold2D项目中没有链接“CCTextureCache + CCBigImageExtensions”?

ERROR: Uncaught exception -[CCTextureCache 
addImageFromAnotherThreadWithName:target:selector:]: unrecognized 
selector sent to instance 0xa17d010 

当加载plist文件到CCBigImage。我钉下来到如此地步,

CCBigImage* bg = [CCBigImage nodeWithTilesFile:@"bg1dot5.plist" tilesExtension: @"pvr.ccz" tilesZ: 0] 

电话CCBigImage负载()。此方法调用

[CCTextureCache sharedTextureCache] addImageFromAnotherThreadWithName: _imageName 
                   target: self 
                  selector: @selector(loadedTexture:) 

最终导致指定的异常。我导入了“CCTextureCache + CCBigImageExtensions.h”到加载CCBigImage的源文件中,所以我期望给定的选择器被添加到CCTextureCache中,但显然它不是。

我使用的是Kobold2d 1.1.0和XCode 4.3.3(所有最新版本)。为了让选择器被包含在内,我还需要做些什么吗?

我也叫

[[CCTextureCache sharedTextureCache] addImageFromAnotherThreadWithName:@"" target:nil selector:nil]; 

直接,因为我包括扩展头文件,但相同的异常occures当我打开一个CCBigImage项目编译罚款。

回答

2

包含Objective-C类别的静态库必须与iOS应用程序强制关联(Mac应用程序没有此问题),否则无法解析类别方法,并且出现您描述的错误。 More info here.

建议不要使用-all_load标志,特别是在Kobold2D中。这会盲目地将所有可用的代码链接到应用程序,甚至是您的应用程序中未使用的代码。它基本上使链接器变得盲目和愚蠢,应用程序的大小可能增长几兆字节。

我将在未来的Kobold2D版本中添加cocos2d扩展的强制链接。目前,修复方法是在BuildSettings组的Kobold2D-Libraries项目的Xcode中编辑FrameworksAndLibraries.xcconfig文件。

找到部分,其中框架/库力加载:

LINK_WITH_ADMOB = $(KKLIBROOT)/GoogleAdMobAdsSDK/libGoogleAdMobAds.a 
FORCE_LOAD_COCOS2D = -force_load "$(BUILT_PRODUCTS_DIR)/libcocos2d-ios.a" 
FORCE_LOAD_KOBOLD2D = -force_load "$(BUILT_PRODUCTS_DIR)/libkobold2d-ios.a" 
FORCE_LOAD_KOBOLDSCRIPT = -force_load "$(BUILT_PRODUCTS_DIR)/libkoboldscript-ios.a" 
FORCE_LOAD_KOBOLDSCRIPTWRAPPER = -force_load "$(BUILT_PRODUCTS_DIR)/libkoboldscriptwrapper-ios.a" 
FORCE_LOAD_ISIMULATE = -force_load "$(KKLIBROOT)/iSimulateSDK/libisimulate-4.x-opengl.a" 
FORCE_LOAD_COCOS3D = -force_load "$(BUILT_PRODUCTS_DIR)/libcocos3d-ios.a" 

KKFW_IOS = $(KKFW_SysConfig) $(KKFW_AVFoundation) $(KKFW_CoreGraphics) $(KKFW_CoreLocation) $(KKFW_MediaPlayer) $(KKFW_OpenGLES) $(LINK_WITH_ADMOB) $(FORCE_LOAD_KOBOLD2D) $(FORCE_LOAD_KOBOLDSCRIPT) $(FORCE_LOAD_KOBOLDSCRIPTWRAPPER) $(FORCE_LOAD_COCOS2D) 

现在添加一个FORCE_LOAD_ ......条目中的“KKFW_IOS = ...”行前-force_load的cocos2d中的扩展库(这是所有在一条线,我只是增加了可读性换行):

FORCE_LOAD_COCOS2D_EXTENSIONS = 
      -force_load "$(BUILT_PRODUCTS_DIR)/libcocos2d-extensions-ios.a" 

然后在“KKFW_IOS = ...”行结束这个新FORCE_LOAD_COCOS2D_EXTENSIONS项追加(简称为便于阅读):

KKFW_IOS = $(KKFW_SysConfig) … $(FORCE_LOAD_COCOS2D_EXTENSIONS) 

这应该可以解决问题,现在您应该可以使用CCBigImage类别方法。

+0

Danke!奇迹般有效。 –

+0

我下载了最新的Kobold2D版本,这一行已被注释掉,并且还说如果该行没有注释,我会得到另一个错误。它的真实性,当取消注释行时会出现另一个编译器错误,如果没有,我会得到上述错误。我正在使用XCode 4.5。有什么我失踪? – bobmoff

相关问题