#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的数组。
答案 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 ++代码。