从NSArray连接字符串?

时间:2014-11-30 19:32:11

标签: objective-c

#import <Foundation/Foundation.h>
#include <stdlib.h>
#include "GenerarPassword.h"

@implementation GenerarPassword

-(NSDictionary*) generarDiccionario
{
    NSDictionary* m_Dict =[NSDictionary dictionaryWithObjectsAndKeys:
      @"Dx", @"1",
      @"Om", @"2",
      @"Al", @"3",
      @"Na", @"4",
      @"Je", @"5",
      @"Ko", @"6",
      @"Ke", @"7",
      @"Fi", @"8",
      @"Re", @"9",
      @"Me", @"10",
      @"Mu", @"11",
      @"Ra", @"12",
      @"Lu", @"13",
      @"Lo", @"14",
      @"Ka", @"15"
      ,nil];

    return m_Dict;
}

-(void) printPassword:(int) password
{
    NSLog(@"%d",password);
}

/*Se genera la clave numérica*/
-(int) generarClave
{
    srand(time(0));
    int r = rand() %(9999-1000+1) +1000;
    return r;
}

//Esta función Genera el valor Aleatorio
-(NSString*) GenerarValor:(NSString*) key
{
    NSString *valor = [[self generarDiccionario] valueForKey: key];
    return valor;
}

-(NSArray*) generarlistaletras:(int) numero
{
    NSArray* lista = [[NSArray alloc] initWithObjects: [NSNumber numberWithInt:0], [NSNumber numberWithInt:0], [NSNumber numberWithInt:0],nil];
    return lista;
}

-(void) imprimirArreglo:(NSArray*) arreglo
{
    int i = 0;
    NSString *str1 =@" ";
    for (i=0;i<2;i++)
    {
        [str1 stringByAppendingString:[arreglo objectAtIndex:0]];
    }
    NSLog(@"%@",str1);
} 

     // lista = [0,0,0]
      //lista[random.randrange(0,3)] = [GenerarValor(numero)]

      //for i in range(len(lista)):
     //       if lista[i] == 0:
     //             lista[i] = [GenerarValor(random.randrange(11,20))]
     // return lista
@end

int main(int argc, char const *argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    GenerarPassword *Generar1 = [[GenerarPassword alloc]init];
    int clave = [Generar1 generarClave];
    [Generar1 printPassword:clave];
    NSDictionary* dict = [Generar1 generarDiccionario];
    NSLog(@"%@",[[Generar1 generarDiccionario] valueForKey:@"1"]);
    [Generar1 imprimirArreglo:[Generar1 generarlistaletras:123]];
    [pool drain];
    return 0;
}

我的想法是打印数组(函数imprimirArreglo),但是当运行程序时我得到这个异常:未捕获异常NSInvalidArgumentException,原因:无法确定 - [NSIntNumber(null)]的类型信息;我想要的是打印格式为0 0 0的数组。

1 个答案:

答案 0 :(得分:0)

好的,我把你的代码编辑成更合理的东西。

#import <Foundation/Foundation.h>
#include "GenerarPassword.h"

@interface GenerarPassword ()

@property (nonatomic, strong) NSArray *generarArray;

@end

@implementation GenerarPassword

- (NSArray *)generarArray
{
    if (!_generarArray) {
        _generarArray = @[@"Dx", @"Om", @"Al", @"Na", @"Je", @"Ko", @"Ke", @"Fi", @"Re", @"Me", @"Mu", @"Ra", @"Lu", @"Lo", @"Ka"];
    }

    return _generarArray;
}


- (void)printPassword:(NSInteger)password
{
    NSLog(@"%@", @(password));
}

/*Se genera la clave numérica*/
- (NSInteger)generarClave
{
    return arc4random_uniform(9000) + 1000;
}

//Esta función Genera el valor Aleatorio
- (NSString *)generarValor:(NSInteger)key
{
    return self.generarArray[key];
}

- (NSArray *)generarlistaletras:(NSInteger)numero
{
    return @[@0, @0, @0];
}

- (void)imprimirArreglo:(NSArray *)arreglo
{
    NSString *string1 = [NSString stringWithFormat:@"%@", [arreglo componentsJoinedByString:@" "]];
    NSLog(@"%@", string1);
}

@end

int main(int argc, char const *argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    GenerarPassword *generarPassword = [[GenerarPassword alloc] init];

    NSInteger clave = [generarPassword generarClave];
    [generarPassword printPassword:clave];

    NSLog(@"%@", generarPassword.generarArray[0]);

    [generarPassword imprimirArreglo:[generarPassword generarlistaletras:123]];

    [pool drain];
    return 0;
}

我注意到了一些事情。

首先,如果您要将值存储在仅计数数字的键旁边...那么请使用数组而不是字典。

其次,您实际上从未实际调用方法generarValor,所以很多代码似乎都没有做任何事情。

第三,您应该使用属性来存储数组/字典。您将在代码中重复创建新的字典。

NSDictionary* dict = [Generar1 generarDiccionario];行实际上只是在浪费处理器周期,因为您根本没有真正使用dict

第四,变量名和方法应以小写字母开头,类名以大写字母开头。

第五,这里有很多无用的代码。我想我已经用你的imprimirArreglo方法解决了这个问题。

第六,当你把它放到StackOverflow上时,很好地格式化你的代码。假装你正在做大学考试。这里没有人付钱,所以他们在整个地方的代码中挣扎的机会非常小。

另外,请查看代码。我对它进行了一些改进和更改,使其成为Objective-C代码,而不是C ++代码。