nsstring文件名|为什么在header file 中写不了nsstring

nsstring文件名|为什么在header file 中写不了nsstring的第1张示图

① NSString类型如何转换成NSURL型(涉及文件删除)

书中的部分语法已经弃用,其中有一个是删除文件的方法 – (BOOL)removeFileAtPath:(NSString *)pathhandler:(id)handler 已经被弃用,其替代者是 – (BOOL)removeItemAtURL:(NSURL *)URL*)URL 。例子中的相关代码如下:NSString *fName = @ testfile ;if ([fm removeFileAtPath: fName handler: nil] == NO){NSLog (@ File removal failed! );return 6;}我改成这样但是删不掉,也不确定对不对NSString *fName = @ testfile ;if ([fm removeItemAtURL: [NSURL URLWithString: [fName stringByAppendingFormat:fName]] error: nil]== NO){NSLog (@ File removal failed! );return 6;}——解决方案——————————————————–path 指的是你的文件路径,不是文件名。假设你的文件打包在主项目中:NSString* filePath = [[NSBundle mainBundle] pathForResource: testFile ofType:xml ];——解决方案——————————————————–得把路径加上,不光是文件名——解决方案——————————————————–探讨引用:得把路径加上,不光是文件名我的文件和程序在同一目录,而且其他的操作都没问题——解决方案——————————————————–用- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error——解决方案——————————————————–或者用[fm removeItemAtURL: [NSURL fileURLWithPath:(NSString *)path]]试试,path 是你以前的文件路径。不用转换。就用8 楼的。

② 为什么在header file 中写不了nsstring

是C++的头文件,主要用于其他头文件的包含和类的定义,在文件名为(*.h)。 头文件如果不被其他源文件(*.cpp)包含的话,在编译时是会被忽略的(有错没错它都不会报),所以一般不要把函数的定义放在这里,而且在开始编写时就应该让它被其他文

③ objective c如何在头文件定义NSString数组

头文件里@property (strong, nonatomic) NSString * urlString;相当于声明了一个NSString 类型的变量urlString,同时,声明并实现的它的get和set方法。有了这两个方法,我们就可以在其他的类中访问这个变量。synthesize的好处好搞不清楚,一般没有使用,没加的话,系统会默认来一句@synthesize 变量名= _变量名。我们在类里面就可以使用self.变量名或者_变量名来使用这个变量

④ ios wkwebview 是否有缓存

有缓存的如果清理缓存- (void)dealloc { [self.webView removeObserver:self forKeyPath:@"estimatedProgress"]; [self.webView removeObserver:self forKeyPath:@"title"]; [self clearCache];}/** 清理缓存的方法,这个方法会清除缓存类型为HTML类型的文件*/- (void)clearCache { /* 取得Library文件夹的位置*/ NSString *libraryDir = (NSLibraryDirectory,NSUserDomainMask, YES)[0]; /* 取得bundle id,用作文件拼接用*/ NSString *bundleId = [[[NSBundle mainBundle] infoDictionary]objectForKey:@"CFBundleIdentifier"]; /* * 拼接缓存地址,具体目录为App/Library/Caches/你的APPBundleID/fsCachedData */ NSString *webKitFolderInCachesfs = [NSString stringWithFormat:@"%@/Caches/%@/fsCachedData",libraryDir,bundleId]; NSError *error; /* 取得目录下所有的文件,取得文件数组*/ NSFileManager *fileManager = [NSFileManager defaultManager];// NSArray *fileList = [[NSArray alloc] init]; //fileList便是包含有该文件夹下所有文件的文件名及文件夹名的数组 NSArray *fileList = [fileManager contentsOfDirectoryAtPath:webKitFolderInCachesfs error:&error]; /* 遍历文件组成的数组*/ for(NSString * fileName in fileList){ /* 定位每个文件的位置*/ NSString * path = [[NSBundle bundleWithPath:webKitFolderInCachesfs] pathForResource:fileName ofType:@""]; /* 将文件转换为NSData类型的数据*/ NSData * fileData = [NSData dataWithContentsOfFile:path]; /* 如果FileData的长度大于2,说明FileData不为空*/ if(fileData.length >2){ /* 创建两个用于显示文件类型的变量*/ int char1 =0; int char2 =0; [fileData getBytes:&char1 range:NSMakeRange(0,1)]; [fileData getBytes:&char2 range:NSMakeRange(1,1)]; /* 拼接两个变量*/ NSString *numStr = [NSString stringWithFormat:@"%i%i",char1,char2]; /* 如果该文件前四个字符是6033,说明是Html文件,删除掉本地的缓存*/ if([numStr isEqualToString:@"6033"]){ [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@",webKitFolderInCachesfs,fileName]error:&error]; continue; } } }}

⑤ nsstring中文有乱码怎么解决

在转换时使用了NSASCIIStringEncoding, 导致了转换后的中文字符串乱码。使用NSUTF8StringEncoding即可解决乱码问题。char *Message = (char *)sqlite3_column_text(statement,2); //从sqlite读取的char 型字符串NSString *nsMessage= [[NSStringalloc] initWithCString:Message encoding:NSUTF8StringEncoding]; //转换

⑥ 在iphone开发里,定义一个NSString的字符串,比如是“我爱你”,怎么将这个字符串转换为gbk编码的"我爱你"

视频转换大师WINMPG下载, 壹款功能强大的视频转换工具 可以将各种主流视频格式,如RM、RMVB、VOB、DAT、VCD、SVCD、DVD、ASF、WMV、MP4、3GP、MOV、QT、MPEG、DivX、XviD、AVI、3GPP2、DV等视频格式转换为MP4播放机、MP4手机、智能手机、3GP手机、3GPP2手机、苹果iPod、iPhone手机、Sony PSP、PS3机所支持的便携视频格式。还可以将各种视频文件转换为标准的DVD、SVCD、VCD、MPEG、RMVB格式;还可以转换为电脑上或DVD影碟机所支持的AVI、MPEG、MPEG4、XVID、DIVX、MJPEG、H264格式;还可以转换为土豆、优酷等视频网站流行的FLV、SWF、(Flash)格式及MOV、(QuickTime)格式。http://hi..com/eilldnm/blog/item/c90dc22fa65bf7f7e6cd40e7.html

⑦ 用@property声明的nsstring经常使用关键字,为什么

在大多数切东西的游戏中,当你画一条线划过一个图片精灵时,他们的做法基本上是把图片精灵转变为两个预先画好的被从中间切开的图片精灵,而并不会依照你划过的实际位置。 但是本篇教程将演示一个更cool的技术。我们的水果可以被切割多次,并且它们会根据实际切割的路线动态的分割! 正如你所想的,这是一种高级的技术,所以本篇教程面向的是高阶的Cocos2D和Box2D开发者。如果你刚刚接触Cocos2D和Box2D,你可以先跟随Cocos2D入门和Box2D入门这两篇教程,再继续本篇教程的学习。 本篇教程一共分为3部分: 在第1部分中,你会为游戏打基础,并学习如何创建textured polygons(纹理多边形)。第2部分会教你如何切和分割这些textured polygons。第3部分会教你添加游戏性和特效并将之前的内容变成一个完整的游戏。 特别感谢Rick Smorawski为本篇教程中的工程所做的基础性工作。他负责把flash-based slicing demo移植到了Cocos2D上,并把CCBlade和PRKit转换到了Cocos2D 2.0。 查看下面的视频,你就知道我们将要学习多么cool的新技术了! 游戏Demo 这是一个demo视频,它会演示给你在接下来的教学中马上要做的: 正如我之前提到的,你看到的切水果的效果动感十足。水果会根据你划的位置被切割,并且由于你可以多次的切割它们,你甚至可以把它们切成碎块儿! 视频中你还能看到有一个很cool的刀光效果、一些粒子特效、游戏的逻辑和一些为游戏添彩的音效。 好多的内容啊,那么,让我们开始吧! 项目准备工作 你将要在本项目中使用Cocos2D 2.X,如果你还没有它请前往这里下载。注意你完全可以使用Cocos2D 1.X来代替Cocos2D 2.X,你可以略过本篇教学中转换PRKit和CCBlade到Cocos2.X的部分,但是请留意那些类中其他的小改动。 下载完成后,双击tar文件解压,然后在终端中的以下命令安装它:cd ~/Downloads/cocos2d-iphone-2.0-beta ./install-templates.sh -f -u 启动Xcode并使用iOScocos2d v2.xcocos2d iOS with Box2d模板创建一个新工程,将其命名为CutCutCut。 新的工程看起来应该像这样: 首当其冲的,你应该对模板生成的工程做一些清理,已让其有一个好的起点。 打开HelloWorldLayer.h,移除以下行:CCTexture2D *spriteTexture_;// weak ref 切换到HelloWorldLayer.mm并做如下修改:// Remove this line from the top#import "PhysicsSprite.h" // Replace the init method with this-(id) init {if((self=[super init])){// enable events self.isTouchEnabled =YES; self.isAccelerometerEnabled =YES; CGSize s =[CCDirector sharedDirector].winSize; // init physics[self initPhysics]; [self scheleUpdate]; }return self; } // Remove these two methods-(void) createMenu {//all content}-(void) addNewSpriteAtPosition:(CGPoint)p methods {//all content} // Remove this line from ccTouchesEnded[self addNewSpriteAtPosition: location]; 到此时,你已经从HelloWorldLayer中移除了全部的PhysicsSprite(有物理特性的精灵)的引用,但你还没有从项目中删除它们的文件。由于稍后你需要从PhysicsSprite.mm中拷贝一个方法,所以我们目前先留着它。 使用快捷键Command+R编译并运行你的项目,你将会看到一个被绿色边框包围的黑色屏幕: 剩下的模板代码设置了Box2D的debug drawing,这一功能可以把所有Box2D物体都画在屏幕上。看到屏幕周围绿色的线了吧?它们就是使用项目默认的initPhysics方法生成的墙。 浏览一下项目中其余的代码,确保你明白了所有的逻辑,它初始化了Box2D world,设置了了地面(绿色的边界),设置了debug drawing等等。 资源包 接下来请下载项目需要的资源并解压文件。 请先不要把所有东西都加入工程,其中一些文件实际上是可选的。让这个文件夹一直在手边,随着本篇教程的进行,我会指导你添加一些文件到项目中去。 以下是你在这个包中能找到的: 一个背景图片和一系列水果的图片,它们都是由Vicki制作的,Images文件夹中还有其他的各种各样的图片。 背景音乐是使用gomix.it混合制作的,它们在Sounds文件夹中。 音效一部分是使用bfxr制作的,另一部分是从freesound下载的,他们在Sounds文件夹中。 所有的粒子系统都是由Particle Designer制作的,它们在Particles文件夹中。 一个由PhysicsEditor生成的PLIST文件,它包含了Fruits和Bomb类的顶点信息,在Misc文件夹中。 Fruits和Bomb类,在Classes文件夹中。PRKit 和CCBlade,教程中你将会用到它们,在Classes文件夹中。 声音资源的作者列表,在Misc文件夹中。 使用PRKit绘制纹理多边形 我们的目标是把精灵切成很多份。通常一个CCSprite包含一个texture(纹理)和一个无视图形真正形状的碰撞框。这个矩形的碰撞框并不适合我们的游戏,因为知道精灵的实际形状对于切割它是重要的一个步骤。 你需要创建一个纹理多边形,它会完成如下功能: 创建一个多边形/形状和一个相应形状的图片(纹理映射) 只显示在多边形范围之内的图片部分(纹理填充) Cocos2D和Box2D都没有提供可以完成此功能的类,通常来说,这需要使用一些三角变换,外加自定义的OpenGL绘制模式。 听起来很困难是吗? 幸运的是,所有复杂的计算和完成这些的绘制代码都已经被Precognitive Research这里的人实现了。他们基于Cocos2D创建了一个叫做PRKit的库,这个库可以处理纹理映射和纹理填充。 我们来进一步研究纹理多边形,先从这里下载PRKit,解压它,并把PRKit文件夹拖拽进你的项目中。确保”Copy items into destination group’s folder”和”Create groups for any added folders”都是选中的。 注意,PRKit是由Precognitive Research维护的,它以后有可能更新。为了避免引起疑惑,我们的资源包里包含的是我在做本篇教学时PRKit的版本。 你的项目现在应该包含三个文件了: 编译并运行,你将会遇到一些错误: 这些错误是由于PRKit是针对Cocos2D 1.X版本的,1.X版本使用的是OpenGL ES 1.1,然而你目前使用的是Cocos2D 2.X,它使用的是OpenGL ES 2.0,它们两者之间存在着巨大的差异。 想要修复它们,首先打开PRFilledPolygon.m并做以下修改:// Add inside the initWithPoints: andTexture: usingTriangulator: method self.shaderProgram =[[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionTexture]; // Replace the calculateTextureCoordinates method with this-(void) calculateTextureCoordinates {for(int j =0; j < areaTrianglePointCount; j++){ textureCoordinates[j]= ccpMult(areaTrianglePoints[j],1.0f/texture.pixelsWide*CC_CONTENT_SCALE_FACTOR()); textureCoordinates[j].y =1- textureCoordinates[j].y; }} // Replace the draw method with this-(void) draw{ CC_NODE_DRAW_SETUP(); ccGLBindTexture2D( self.texture.name ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); ccGLBlendFunc( blendFunc.src, blendFunc.dst); ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position | kCCVertexAttribFlag_TexCoords ); glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, areaTrianglePoints); glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, textureCoordinates); glDrawArrays(GL_TRIANGLES, 0, areaTrianglePointCount); } 让我们一步一步过一遍以上代码。 首先,在Cocos2D中,每一个CCNode又有一个关联的OpenGL ES 2.0 shader program(着色程序)。为了画出PRFilledPolygon,你需要请求一个内建的的”Position/Texture” shader,你在init方法中指定它。 接下来,你需要为纹理正确地计算每一个多边形坐标。为了达成此目标,你需要对calculateTextureCoordinates方法做两处修改:比率: 因为此类会计算它自己的纹理坐标,它并不会自动处理高清模式。解决它的方法仅仅需要将texture.pixelsWide乘上CC_CONTENT_SCALE_FACTOR,CC_CONTENT_SCALE_FACTOR是一个Cocos2D提供的方便的低清高清坐标转换的系数。翻转Y: 由于某些原因,PRFilledPolygon会把纹理绘制成倒的,所以你要把y值翻转。 最后,draw函数里边的代码被更新为了OpenGL ES 2.0的,这一处理方式与CCSprite的draw从Cocos2D 1.X到2.X的变化雷同: 首先调用CC_NODE_DRAW_SETUP()为绘制作准备。 glDisableClientState() 和 glEnableClientState()方法是废弃的,不必再调用了。 glVertexPointer() 和 glTexCoordPointer()都被glVertexAttribPointer()方法替代了,glVertexAttribPointer()方法使用Vertex Position 和 Texture Coordinate作为它的参数。 以前需要配置glTexEnvf()用来处理多边形比纹理大的情况,以让纹理重复绘制,现在使用glTexParameteri()代替之。 如果你对以上任意一点感到困惑的话,你可以去查阅OpenGL ES 2.0 for iPhone和Custom Cocos2D 2.X Shaders两篇教程来获取更多的背景知识。但是你并不需要产生的困惑担心过多,因为到目前为止我们所做的就是把这个类转换到能在Cocos2D 2.X使用而已 :] 编译并运行,所有的PRKit的错误都消失了! 是时候实际应用PRKit了。创建一个负责绘制水果的基础类PolygonSprite,它继承自PRKit中的PRFilledPolygon类。 PolygonSprite在PRFilledPolygon基础上创建,引入了一个关联的Box2D body到sprite上,同时它还包含了其他为了完成水果的游戏逻辑的自定义的变量和方法。 我们这就创建它。按Command+N创建一个新文件,选择iOScocos2d v2.xCCNode Class template,使他成为PRFilledPolygon的子类并将其命名为PolygonSprite.m。 切换到PolygonSprite.h并做如下修改:// Add to top of file#import "Box2D.h"#import "PRFilledPolygon.h"#define PTM_RATIO 32 // Add inside @interface b2Body *_body; BOOL _original; b2Vec2 _centroid; // Add after the @[email protected](nonatomic,assign)b2Body *body; @property(nonatomic,readwrite)BOOL original; @property(nonatomic,readwrite)b2Vec2 centroid; // Add before the @end-(id)initWithTexture:(CCTexture2D*)texture body:(b2Body*)body original:(BOOL)original; -(id)initWithFile:(NSString*)filename body:(b2Body*)body original:(BOOL)original; +(id)spriteWithFile:(NSString*)filename body:(b2Body*)body original:(BOOL)original; +(id)spriteWithTexture:(CCTexture2D*)texture body:(b2Body*)body original:(BOOL)original; -(id)initWithWorld:(b2World*)world; +(id)spriteWithWorld:(b2World*)world; -(b2Body*)createBodyForWorld:(b2World*)world position:(b2Vec2)position rotation:(float)rotation vertices:(b2Vec2*)vertices vertexCount:(int32)count density:(float)density friction:(float)friction restitution:(float)restitution; -(void)activateCollisions; -(void)deactivateCollisions; 以上代码声明了PolygonSprite的基础变量和方法。它们是:body: 这是一个关联到sprite的Box2D body。它用来模拟物理特性。

⑧ 如何实现拖拽文件到NSTableView中

您可以在这个例子里学习NSTableView、绑定以及剪贴板的简单使用方法。首先在Interface Builder中拖进一个Table View,拖进一个Object改名为Controller,再拖进一个Array Controller。在Controller里添加一个叫做arrayController的outlet,用菜单中的Write Class自动生成代码并添加至工程中,将arrayController从id类型改为ArrayController *。接着把这个outlet和Array Controller连接起来。将Array Controller绑定至Controller,将Model Key Path改为filenames。将Table View的类改名为DragDropTableView,我们要subclass这个TableView,用于接受拖拽,同时将Table View的delegate设置为Controller。将这个类Write Class保存并添加至工程中。接着选中Table View的第一列,将其绑定到Array Controller上。这样,Array Controller的任何变化,都将自动反应到这一列中。由于我们已经将要实现在Table View中添加内容,只需要调用如下方法:- (void) acceptFilenameDrag:(NSString*) filename{[arrayControlleraddObject:filename];}即可在列表中增加一行文件名。要使View支持接受拖拽,在DragDropTableView.m中,需要实现以下操作:首先在awakeFromNib里,需要打开接受拖拽。[selfregisterForDraggedTypes:[NSArrayarrayWithObjects:NSFilenamesPboardType,nil]];以及如下方法:- (BOOL)performDragOperation:(id<NSDraggingInfo)sender{inti;NSPasteboard*pboard;pboard = [senderdraggingPasteboard];if([[pboardtypes]containsObject:NSFilenamesPboardType]){iddelegate = [selfdelegate];NSArray*filenames = [pboardpropertyListForType:NSFilenamesPboardType];if([delegaterespondsToSelector:@selector(acceptFilenameDrag:)]){for(i=0;i<[filenamescount];i++){[delegateperformSelector:@selector(acceptFilenameDragwithObject:[filenamesobjectAtIndex:i]];}}returnYES;}returnNO;}要参考详细实现方法,您可以下载本文例子。例子下载

⑨ [NSData dataWithContentsOfURL:[NSURL URLWithString:urlStr]]的超时时间如何设置

iPhone的应用程序,我们经常使用的网络下载一些文件,如XML,图片和更多!但往往我们往往需要重复读取这部分数据,或写一些在沙箱中的文件下一次打开该程序,这个时候我们需要使用的缓存文件(读取和写入文件),今天和分享一个Demo,用来缓存从互联网上的图片和XML下载,项目背景:从网上下载的下载图片,并写在temp目录中的临时目录中的文件在程序退出时会是空的,所以用来写的二级缓存的内容是合适的(我是这么认为的)。 1,从URL下载图片NSURL * URL = NSURL URLWithString:_at_ http:// *****巴“]; NSData的数据= [的NSData dataWithContentsOfURL:URL]的UIImage * IMG = [UIImage的imageWithData:数据]注:这是最普通的图片下载,最常见的方式之一,这是不是一个好办法,以后我将与大家分享您和其他下载的临时目录 – (的NSString *)GetTempPath:(NSString的*)文件名{的NSString * tempPath NSTemporaryDirectory()的回报[tempPath :文件名];}缓存的图片,我们要命名的通行证,得到充分的临时路径3,数据写入更改路径数据将writeToFile:自GetTempPath:@“的t??est.png”]以原子方式:NO]; NSData的writeToFile方法用在这里,你可以找到更详细的解释的第一个参数:将数据写入到API中的第二个参数的路径:是否覆盖原始文件覆盖NO方法返回一个bool类型的值,是成功写入,以确定该文件的路径已经存在 – (BOOL)isExistsFile:(的NSString *)的文件路径的NSFileManager * filemanage = [NSFileManager defaultManager];返回[filemanage fileExistsAtPath:路径];} BOOL存在= [自isExistsFile:[自GetTempPath:“test.png”]];存在= YES,NO表示该文件已经存在,这里不存在类似的问题是可以解决的。当然,不仅可以将图片保存到temp目录,和其他文件中的行,当然也可以保存的文件目录中,这样我们就可以保持很长一段时间。

未经允许不得转载:山九号 » nsstring文件名|为什么在header file 中写不了nsstring

赞 (0)