标签: nsarray

如何在Cocoa中做稀疏数组

对于基于唯一整数键的数据集,我有一个未确定的大小.

我想使用NSMutableArray快速查找,因为我的所有键都是基于整数的.

我想做这个.

NSMutableArray* data = [NSMutableArray array]; // just create with 0 size
Run Code Online (Sandbox Code Playgroud)

然后人们会开始用整数索引向我扔数据(都是唯一的)所以我只想做这样的事......

if ([data count] < index)
    [data resize:index];  // ? how do you resize
Run Code Online (Sandbox Code Playgroud)

并调整数组大小,以便我可以...

[data insertObject:obj atIndex:index];
Run Code Online (Sandbox Code Playgroud)

最后一个尺寸和新尺寸之间的所有槽都为零,最终将在以后填充.

所以我的问题是如何调整现有的大小NSMutableArray?

谢谢,罗马

cocoa objective-c nsmutablearray nsarray

8
推荐指数
2
解决办法
5734
查看次数

从NSArray获取NSIndexSet

NSArray具有查找指定索引的对象的有用方法

// To find objects by indexes
- (id)objectAtIndex:(NSUInteger)index
- (NSArray *)objectsAtIndexes:(NSIndexSet *)indexes

// To find index by object
- (NSUInteger)indexOfObject:(id)anObject
Run Code Online (Sandbox Code Playgroud)

但是,我想获得NSIndexSet给定对象的(多个索引).就像是:

- (NSIndexSet *)indexesOfObjects:(NSArray *)objects
Run Code Online (Sandbox Code Playgroud)

此方法不存在NSArray.我错过了什么吗?有人知道另一种标准方法吗?否则我必须将其写为类别方法.

arrays cocoa nsarray nsindexset

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

Objective C Class还是struct?

我有一个类歌曲,其属性为Title,Key,Artist等.没有方法.我遍历歌曲信息数据库并为每个创建一个Song对象,填充属性,然后将Song对象存储在NSArray中.

然后我想,为什么不只是有一个具有所有相同属性的结构歌曲而不是类宋.这样做会消除类文件,using类的.m文件中的#import Song行,以及需要alloc,init,release.

另一方面,我必须将struct定义放在可能需要它的每个类中.(除非有一些全局可访问的位置 - 是否存在?)此外,结构是否可以存储在NSArray中?

struct class objective-c nsarray

7
推荐指数
2
解决办法
9551
查看次数

基于NSStrings数组从NSArray对象中提取字符串

好吧,这有点模糊,但它让我头疼.

如果你有一个字符串数组

{@"1", @"2", @"4"}
Run Code Online (Sandbox Code Playgroud)

而且你有一个Recipe对象数组

{ {recipe_name:@"Lasagna", recipe_id:@"1"}
  {recipe_name:@"Burger", recipe_id:@"2"}
  {recipe_name:@"Pasta", recipe_id:@"3"}
  {recipe_name:@"Roast Chicken", recipe_id:@"4"}
  {recipe_name:@"Sauerkraut", recipe_id:@"5"}
}
Run Code Online (Sandbox Code Playgroud)

我将如何使用第一个数组创建一个这样的数组:

{@"Lasagna", @"Burger", @"Roast Chicken"}
Run Code Online (Sandbox Code Playgroud)

换句话说,它是取第一个数组中的数字并创建一个recipe_names数组,其中recipe_id匹配数字......

iphone objective-c nsarray ios

7
推荐指数
2
解决办法
4526
查看次数

for loops - 忽略对象类型?

我有时喜欢将IB元素组织成NSArrays主要是为了帮助我组织我的元素.通常,不同类别的对象使它们彼此成为相同的数组.虽然这是一种方便的组织方式,但我似乎无法理解为什么如果我有这样的数组:

NSArray *array = [NSArray arrayWithObjects:((UITextField *)textField), ((UISegmentedController *)segmentedController), nil];
Run Code Online (Sandbox Code Playgroud)

当我放置这样的for循环时,为什么我得到"不响应选择器"消息:

for (UITextField *text in array) {
    [text setText:@""];
}
Run Code Online (Sandbox Code Playgroud)

该for循环似乎要传递是类的不是对象UITextField.

如果指定数组中的所有对象都通过循环,则声明对象类的重点是什么?

编辑仅供参考,这就是我现在处理它的方式:

for (id *object in array) {
    if ([object isMemberOfClass:[UITextField class]]) {
        foo();
    } else if ([object isMemberOfClass:[UISegmentedController class]) {
        bar();
    }
 }
Run Code Online (Sandbox Code Playgroud)

iphone for-loop objective-c nsarray

7
推荐指数
2
解决办法
148
查看次数

使用下标访问NSArray的项目

是否可以使用[idx]访问NSArray的对象?我有一个使用[]样式索引的标准库,我不想重写整个库以适应ObjC的objectAtIndex:方法.

如, NSArray *obj = [NSArray ...]; id item = obj[0];

cocoa objective-c nsarray xcode4

7
推荐指数
1
解决办法
4493
查看次数

将NSArray转换为NSSet,自定义类实例传输不一致

陷入一个有趣的小问题.我正在编写一个方法来过滤数组到唯一对象:

- (NSArray*)distinctObjectsByAddress {
    NSSet* uniqueSet = [NSSet setWithArray:self];
    NSArray* retArray = [uniqueSet allObjects];

    return retArray;
}
Run Code Online (Sandbox Code Playgroud)

并写了一个单元测试来检查:

- (void)testDistinctObjectsByAddress5 {
    Person* adam1 = [[Person alloc] initWithFirstName:@"adam" lastName:@"adam" andParent:nil];
    Person* adam2 = [[Person alloc] initWithFirstName:@"adam" lastName:@"adam" andParent:nil];

    testPersonArray = [NSArray arrayWithObjects:adam1,adam2, nil];

    NSArray* checkArray = [testPersonArray distinctObjectsByAddress];

    STAssertEquals([checkArray count], [testPersonArray count], @"Array %@ counts should match %@ %@",checkArray,adam1,adam2);
}
Run Code Online (Sandbox Code Playgroud)

很简单.有趣的是,测试通过的时间大约有80-90%,并且每次都会失败,因为该distinctObjectsByAddress方法只返回一个对象.我已经能够跟踪它,[NSSet setWithArray:self]但我也能够验证两个人对象是两个不同的对象(至少他们有不同的地址).我假设这setWithArray:只是做一个基本的地址比较,但我不明白为什么它有时会产生两个像它应该的对象,有时只产生一个.

我刚试过的东西正在改变,adam2所以名字和名字并不完全相同adam1.这似乎解决了错误.当对象在逻辑上相同时,这是否指向某种编译器优化?

cocoa objective-c nsarray nsset

7
推荐指数
1
解决办法
7314
查看次数

从NSArray Objective-C创建NSMutableArray

我有一个NSArray,它给了我以下数据:

01/14/2013 13:28:06.559 IUser Reader [71164: c07] (
         {
         "id_acompanhante" = "";
         "id_evento" = 34;
         "user_id" = 1;
         "inserido_por" = "Himself";
         name = iUser;
         status = done;
         type = User;
     }
         {
         "id_acompanhante" = 1;
         "id_evento" = 34;
         "user_id" = 1;
         "inserido_por" = iUser;
         name = "Mayara Roca";
         status = naofeito;
         type = companion;
     }
)
Run Code Online (Sandbox Code Playgroud)

如何将此数据播放到NSMutableArray并在每个项目中添加另一个字段.例:

  {
     "id_acompanhante" = "";
     "id_evento" = 34;
     "user_id" = 1;
     "inserido_por" = "Himself";
     name = IUser;
     status = done;
     type = User;
     tag …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c nsmutablearray nsarray

7
推荐指数
2
解决办法
9065
查看次数

从objective-c中解析的NSString中提取单个值

这些是我的示例NSStrings(解析成数组),简化.

单个字符串对象被解析为"STRING1,STRING2然后DATE TIME然后 - A:VALUE",例如:

The name of first value, first 17/04/2013 11:30:00 - A:30.0 // sometimes there is a comma after first string
The name of second value 17/04/2013 11:00:00 - A:20.0 // sometimes there is NOT a comma after first string
Name of third value 17/04/2013 10:30:00 - A:40.0
Fourth 17/04/2013 09:40:00 - A:50.0
Fifth value 17/04/2013 05:00:00 - A:10.0
Run Code Online (Sandbox Code Playgroud)

好吧,我需要提取STRING或STRING的单独值,STRING:

The name of first value, first
The name of second value
Name of third value
Fourth
Fifth …
Run Code Online (Sandbox Code Playgroud)

regex objective-c nsstring nsarray nsregularexpression

7
推荐指数
1
解决办法
5871
查看次数

通过NSSecureCoding解码NSArray时的奇怪行为

我花了整个下午的时间撞到墙上,试图弄清楚为什么这门课的解码失败了.该类有一个属性,它是Foo对象的NSArray.Foo符合NSSecureCoding,我已成功编码并解码了该类.我在initWithCoder中收到错误:表示无法解码类Foo.通过一些实验,我发现我需要将[Foo类]添加到initWithCoder:为了使它工作.也许这会帮助那些遇到同样问题的人.我的问题是,为什么这是必要的?我没有发现在Apple的文档中这是必要的.

#import "Foo.h"

@interface MyClass : NSObject <NSSecureCoding>
@property (nonatomic) NSArray *bunchOfFoos;
@end

@implementation MyClass

static NSString *kKeyFoo = @"kKeyFoo";

+ (BOOL) supportsSecureCoding
{
    return YES;
}

- (void) encodeWithCoder:(NSCoder *)encoder
{
    [encoder encodeObject:self.bunchOfFoos forKey:kKeyFoo];
}

- (id) initWithCoder:(NSCoder *)decoder
{
    if (self = [super init])
    {
        [Foo class]; // Without this, decoding fails
        _bunchOfFoos = [decoder decodeObjectOfClass:[NSArray class] forKey:kKeyFoo];
    }
    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

objective-c nscoding nsarray ios nssecurecoding

7
推荐指数
2
解决办法
1647
查看次数