2011-03-08 10 views
11

suponer lo siguiente:obtener objetos en NSMutableArray

@interface BOOK : NSObject 
{ 
    @private 
    NSString *title; 
    NSString *author; 
    NSString *ISBN; 
} 
... 
BOOK *booklist = [[[BOOK alloc] init] autorelease]; 
NSMutableArray *myarray = [NSMutableArray array]; 
while (true) 
{ 
    booklist.title = @"title"; 
    booklist.author = @"author"; 
    booklist.ISBN = @"1234-1"; 
    [myarray addObject:booklist]; 
} 

mi pregunta es ¿cómo puedo recuperar el objeto del Libro es decir booklist.title, .author, .ISBN en un determinado índice en myarray.

Respuesta

26

con este código? Imposible, porque se suma la misma lista de libros para el resto del tiempo (hasta que no haya más memoria)

Con código sin bucles infinitos que usaría

NSInteger index = 0; 
Book *aBook = [myArray objectAtIndex:index]; 
NSString *title = aBook.title; 
+0

En el escenario real del bucle while es un flujo de texto, así que mientras que la secuencia de texto es cierto. Declaro myarray en el archivo .h y en el archivo .m tengo algunas funciones que llaman myarray. Después de asignar los valores, llamé a [myarray ObjectAtIndex: index] pero obtuve un "SIGABRT" en xcode. – Drew

+0

si no publica el código real, no puedo ayudar. Si obtiene un error o una excepción, debe publicar el código exacto que causó esa excepción. –

+0

esta es la línea exactaBook * aBook = [myArray objectAtIndex: index]; – Drew

2

Puede que esto no ayuda en absoluto, pero me recuerdo haber tenido problemas cuando no se esté lanzando objetos al tiempo que tira de matrices ...

Book *aBook = (Book *)[myArray objectAtIndex: index]; 

puede ser útil, no puede ... y sé que este post es viejo, pero tal vez que va a ayudar a alguien ..

.scott

+0

Sí. Esto ha sido imprescindible en el pasado. Creo que devuelve (id) y el casting ayuda. –

2

Comenzando con Xcode 4.5 (y Clang 3.3), es posible utilizar Objective-C Literals:

Book *firstBookInArray = myArray[0]; 
0

Tiene esto se extiende si quieres

Crear archivo extends.h añadir este código y import "extends.h" en su proyecto:

/*______________________________ Extends NSMutableArray ______________________________*/ 
/** 
* Extend NSMutableArray 
* By DaRkD0G 
*/ 
@interface NSMutableArray (NSArrayAdd) 
/** 
* Get element at index 
* 
* @param index 
*/ 
- (NSObject *) getAt:(int) index; 
@end 
/** 
* Extend NSMutableArray Method 
* By DaRkD0G 
*/ 
@implementation NSMutableArray (NSArrayAdd) 
/** 
* Get element at index 
* 
* @param index 
*/ 
- (NSObject *) getAt:(int) index { 
    NSInteger anIndex = index; 
    NSObject *object = [self objectAtIndex:anIndex]; 
    if (object == [NSNull null]) { 
     return nil; 
    } else { 
     NSLog(@"OK found "); 
     return object; 
    } 

} 
@end 
/*______________________________ Extends NSArray ______________________________*/ 
/** 
* Extend NSArray 
* By DaRkD0G 
*/ 
@interface NSArray (NSArrayAdd) 
/** 
* Get element at index 
* 
* @param index 
*/ 
- (NSObject *) getAt:(int) index; 
@end 
/** 
* Extend NSArray Method 
* By DaRkD0G 
*/ 
@implementation NSArray (NSArrayAdd) 
/** 
* Get element at index 
* 
* @param index 
*/ 
- (NSObject *) getAt:(int) index { 
    NSInteger anIndex = index; 
    NSObject *object = [self objectAtIndex:anIndex]; 
    if (object == [NSNull null]) { 
     return nil; 
    } else { 
     NSLog(@"OK found "); 
     return object; 
    } 

} 
@end 

USO:

NSObject object = [self.arrayItem getAt:0]; 
NSObject object2 = [self.arrayItem getAt:50]; 
Cuestiones relacionadas