生成Obj C中的字符串列表

Bac*_*alo -11 cocoa objective-c nsbundle nsmutablestring

似乎Objective C通过篮球跳跃使得看似简单的任务非常困难.

我只需要创建的字符串,序列image1.jpg,image2.jpg等等等等

即在一个循环中 var imgString:String='image'+i+'.jpg;

我假设最佳做法是使用NSMutableStringwith appendString方法?

我究竟做错了什么??

NSMutableString *imgString;

    for(int i=1;i<=NUMIMAGES;i++){
    imgString.appendString(@"image"+i+@".jpg");
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

错误:请求成员'appendString'不是结构或联合

bbu*_*bum 37

我不能想象如何产生的串image5image4image3image2image1.jpgstring3你的"答案"自己的问题可能会被理解为有用或溶液(我贴你的代码为基础的Xcode工具项目瓦特/设定为5 NUMIMAGES).

似乎Objective C通过篮球跳跃使得看似简单的任务非常困难.

阅读Objective-C指南字符串编程指南,然后得出结论.批判你不理解的东西通常会适得其反(我们都已经做到了 - 但是当受挫时很容易做到).

我只需要创建一个字符串序列,image1.jpg,image2.jpg等

天真的解决方案:

#define NUMIMAGES 5
NSMutableArray *fileNames = [NSMutableArray array];
for(int i = 0; i<5; i++)
    [fileNames addObject: [NSString stringWithFormat: @"image%d.jpg", i]];
NSLog(@"fileNames %@", fileNames);
Run Code Online (Sandbox Code Playgroud)

输出:

fileNames (
    "image0.jpg",
    "image1.jpg",
    "image2.jpg",
    "image3.jpg",
    "image4.jpg"
)
Run Code Online (Sandbox Code Playgroud)

请注意,天真的解决方案没有任何特别的错误.它比必要的更脆弱,效率更低,代码更多.

一个可能的更好的解决

  1. 将所有图像作为资源添加到应用程序项目中.

  2. 使用NSBundle API一次性获取所有图像的URL.

即:

NSArray *paths = [[NSBundle mainBundle] pathsForResourcesOfType: @"jpg" inDirectory: nil];
Run Code Online (Sandbox Code Playgroud)

这不仅可以从代码中删除图像名称的硬编码,还可以让系统优化目录枚举和路径生成.如果你只想加载一部分图像 - 比如你正在编写游戏并拥有一系列与怪物相关的图像 - 那么将所有相关图像放在一个目录中,将目录添加到资源中,然后传递directory的名称作为上述方法的第二个参数.

所有这些 - 以及更多 - 都记录在资源编程指南中.

  • NSArray文档非常清晰,甚至还有一个配套的编程指南:http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Collections/Collections.html#//apple_ref/doc/uid/10000034i (2认同)

Geo*_*che 7

首先,您调用方法的语法是关闭的 - 我建议您阅读Apples Objective-C简介.值得注意的是,要调用方法,请使用[someObject someMethod]语法.

接下来的问题是你永远不会创建你想要附加的字符串,你可以使用例如[NSMutableString string].

继续,将可变字符串与一些格式化字符串连接连接起来-appendFormat:,例如:

NSMutableString *imgString = [NSMutableString string];

for (int i=1; i<=NUMIMAGES; i++) {
    if (i > 1) [imgString appendString:@", "];
    [imgString appendFormat:@"image%d.jpg", i];
}
Run Code Online (Sandbox Code Playgroud)