标签: nsarray

如何使用compare:options对NSArray进行排序

我有一个NSArray包含数字作为NSString对象.即.

[array addObject:[NSString stringWithFormat:@"%d", 100]];
Run Code Online (Sandbox Code Playgroud)

如何以数字方式对数组进行排序?我可以使用compare:options并指定NSNumericSearch为NSStringCompareOptions吗?请给我一个示例/示例代码.

sorting iphone compare nsarray

6
推荐指数
2
解决办法
7212
查看次数

NSDirectoryEnumerator和子文件夹

我有一个iPhone应用程序搜索文件夹,整理所有音频文件的数组,并让他们回放.问题是,如果我正在搜索的文件夹中有一个子文件夹,它将跳过它/不进入其内容.

我的代码如下:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 NSString *documentsDirectory = [paths objectAtIndex:0];
 NSDirectoryEnumerator *direnum = [[NSFileManager defaultManager] enumeratorAtPath:documentsDirectory];

 NSString *pname;

 while (pname = [direnum nextObject])
{
      [musicArray addObject:[pname stringByDeletingPathExtension]];
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是继续搜索其子文件夹,我将如何去做?

iphone cocoa nsarray

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

Array不会从plist加载数据

我不确定我的问题究竟是什么,因为我现在已经使用这种方法一段时间了,从来没有遇到过这个问题.

基本上,正如标题所说.此代码从位于"Resources"组中的plist加载数据

NSString *myFile = [[NSBundle mainBundle] pathForResource:@"myList" ofType:@"plist"];
myArray = [[NSArray alloc]initWithContentsOfFile:myFile];
NSLog(@"%@", myArray);
Run Code Online (Sandbox Code Playgroud)

它显示(null).谁知道为什么?

我在同一个ViewController中有另一个设置并且工作得很好.然而,这个特定的钳子不会加载.我甚至还删除了plist,只是从另一个创建了一个副本,以确保不是结构问题.

我做错了吗?我应该使用FileManager吗?

更新------------------------------------------------- ------------------------

好吧,我无法相信我要说的话.大声笑

我正在使用XCode 4,你在Xcode中编辑plists的方式与Xcode 3.x不同.和早期版本一样,你可以选择你想要的plist的根(数组,字典等)我的问题是我试图加载到NSArray中的plist实际上是一个结构化的字典.但是我从来没有在Xcode中看到这个,除了使用TextEdit或其他文本编辑器浏览内容之外,我不知道如何看到这个.

我必须说,很傻.有谁知道为什么XCode 4不会像XCode 3.x那样显示plist的根?

XCode 3.x:http://dl.dropbox.com/u/919254/XCode3.png

XCode 4:http://dl.dropbox.com/u/919254/Screen%20shot%202011-04-10%20at%202.30.35%20AM.png

iphone objective-c plist nsarray

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

arrayWithContentsOfFile无法读取plist文件

我有一个包含2个字符串的数组的plist看到图像:

http://imageshack.us/photo/my-images/263/myplist.png/

在我的viewDidLoadi中添加:

NSString *file = [[NSBundle  mainBundle] pathForResource:@"Data"    ofType:@"plist"];

NSArray *array = [NSArray    arrayWithContentsOfFile:file];

NSLog(@"array = %@", array);
Run Code Online (Sandbox Code Playgroud)

但我总是null为什么?感谢帮助.

更新:解决方案是你需要手动编辑plist文件(Xcode4默认使用Dictionnary)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <array>
        <string>HO</string>
        <string>HI</string>
    </array>
</array>
</plist>
Run Code Online (Sandbox Code Playgroud)

iphone plist nsarray nsbundle

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

如何扩展NSArray?

这是我的尝试:

H文件:

@interface Strings : NSArray
@end
Run Code Online (Sandbox Code Playgroud)

M文件:

@implementation Strings
- (id) init
{
    [self initWithObjects:
     @"One.",
     nil];
    return self;
}
@end
Run Code Online (Sandbox Code Playgroud)

我跑的时候得到这个:

'NSInvalidArgumentException',原因:' * - [NSArray initWithObjects:count:]:仅为抽象类定义的方法.定义 - [Strings initWithObjects:count:]!'

这就是我所做的:

H文件:

@interface Strings : NSObject
+ (NSArray*) getStrings;
@end
Run Code Online (Sandbox Code Playgroud)

M文件:

@implementation Strings
+ (NSArray*) getStrings
{
    NSArray* strings = [[NSArray alloc] initWithObjects:
     @"One.",
     nil];
    return strings;
}
@end
Run Code Online (Sandbox Code Playgroud)

objective-c extend nsarray ios

6
推荐指数
2
解决办法
3573
查看次数

从NSArray中的NSNumber获取Integer值

我有一个NSArray与NSNumber对象具有int值:

arrayOfValues = [[[NSArray alloc] initWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:3], [NSNumber numberWithInt:5], [NSNumber numberWithInt:6], [NSNumber numberWithInt:7], nil] autorelease];
[arrayOfValues retain];
Run Code Online (Sandbox Code Playgroud)

我试图像这样迭代数组:

int currentValue;
for (int i = 0; i < [arrayOfValues count]; i++)
{
    currentValue = [(NSNumber *)[arrayOfValues objectAtIndex:i] intValue];
    NSLog(@"currentValue: %@", currentValue); // EXE_BAD_ACCESS
}
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

iterator objective-c nsnumber nsarray ios

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

比较具有相同值但具有不同顺序的两个数组

我有2个nsarray,具有相同的值,但顺序不同.

NSArray*array1 = {0,1,2,3}
NSArray*array2 = {2,3,1,0}

我需要一种方法来确定两个数组是否具有不同顺序的相同值.

的种类

-(BOOL) isSameValues:(NSArray*)array1 and:(NSArray*)array2;
Run Code Online (Sandbox Code Playgroud)

objective-c nsarray

6
推荐指数
3
解决办法
7614
查看次数

基于NSDictionay中的密钥对NSDictionary的NSArray进行分组

我试图过滤掉NSArray的NSArray.在我的下面的例子中,我希望dict1,dict2和dict4分组在一个数组中,dict3和dict5分组在第二个数组中,dict6在第三个数组中.

我在NSArray中获取这些数据,所以基本上下面的"orig"数组是我的输入,我知道我需要根据"Name"键进行分组.

我没有循环遍历NSArray,而是使用valueForKeyPath基于键路径返回数组,但这不起作用(与日志崩溃 - [NSMutableArray addObjectsFromArray:]:数组参数不是NSArray').

任何建议.

NSDictionary *dict1 = @{@"Name" : @"T1", @"Age" : @"25"};
NSDictionary *dict2 = @{@"Name" : @"T1", @"Age" : @"25"};
NSDictionary *dict3 = @{@"Name" : @"T2", @"Age" : @"27"};
NSDictionary *dict4 = @{@"Name" : @"T1", @"Age" : @"25"};
NSDictionary *dict5 = @{@"Name" : @"T2", @"Age" : @"27"};
NSDictionary *dict6 = @{@"Name" : @"T3", @"Age" : @"28"};

NSArray *orig = @[dict1, dict2, dict3, dict4, dict5, dict6];

NSMutableArray *final = [NSMutableArray array];

final = [orig valueForKeyPath:@"@unionOfArrays.Name"];

NSLog(@"Final …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c nsdictionary nsarray ios

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

将JSON转换为NSArray

我在页面上输出了一个JSON数组.我想将此JSON数组转换为NSArray.

这是网页上的JSON输出:

[{"city":"Current Location"},{"city":"Anaheim, CA"},{"city":"Los Angeles, CA"},{"city":"San 
Diego, CA"},{"city":"San Francisco, CA"},{"city":"Indianapolis, IN"}]
Run Code Online (Sandbox Code Playgroud)

这是我的NSURL调用和NSJSONSerialization:

NSString *cityArrayURL = [NSString stringWithFormat:@"http://site/page.php";
NSData *cityData = [NSData dataWithContentsOfURL:[NSURL URLWithString:cityArrayURL]];

NSError *error;
NSDictionary *cityJSON = [NSJSONSerialization JSONObjectWithData:cityData 
options:kNilOptions error:&error];
Run Code Online (Sandbox Code Playgroud)

我想将名为cityJSON的NSDictionary转换为NSArray.有人能告诉我下一步可能是什么吗?谢谢!

objective-c nsarray ios nsjsonserialization

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

为什么我的NSMutableArray在某些索引上包含nil?

问题:

在我填充了一个NSMutableArray对象并尝试用它做某事之后,它包含(id)0x0了一些索引.我认为NSMutableArray在Objective-C中根本不可能添加nil 所以我想知道为什么会发生这种情况.

这是什么时候发生的?

不幸的是,"有时候".它可以通过下载超过5000个瓷砖来重现,只是为了获得足够高的金额以便发生这种情况.即使有超过5000个瓷砖,它有时也会完美无缺.

语境:

我的应用程序有一个按钮,可以开始下载特定区域的地图图块.下载在后台线程中并行发生,并为每个下载的磁贴报告.

为了允许取消下载,在我的下载器单例中,我有一个临时表NSMutableArray,可以保存每个下载的磁贴的哈希值.取消后,我可以使用该哈希列表删除数据库中的每个已保存的磁贴.

在下载过程中保存哈希似乎没问题,但是当我真的想要对它做任何事情时(我用[_currentTileHashes copy]它来改变它NSArray以给予删除方法),它会抛出NSInvalidArgumentException一行说:

-[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[3402]
Run Code Online (Sandbox Code Playgroud)

当我使用调试器检查_currentTileHashes可变数组时,我确实看到一个或两个索引实际上是nil或(id)0x0.这个截图说明了它:

调试器在数组中显示nil

相关代码:

此代码来自每个tile下载的回调,它会散列磁贴,将其添加到hashes数组并回调UI以获取进度:

- (void)tileCache:(RMTileCache *)tileCache didBackgroundCacheTile:(RMTile)tile withIndex:(NSUInteger)tileIndex ofTotalTileCount:(NSUInteger)totalTileCount {
    DebugLog(@"Cached tile %lu of %lu.", (unsigned long)tileIndex, (unsigned long)totalTileCount);
    if (_currentlyDownloading) {
        float progress = (float)tileIndex / (float)totalTileCount;

        NSDictionary *progressDict = @{@"progress" : [NSNumber numberWithFloat:progress],
                                       @"routeId" : _downloadingRoute.routeId};

        [_currentTileHashes addObject:[RMTileCache tileHash:tile]];

        [[NSNotificationCenter defaultCenter] …
Run Code Online (Sandbox Code Playgroud)

objective-c nsmutablearray nsarray ios mapbox

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