2011-03-08 10 views
11

przyjęto następujące założenia:dostać obiektów w 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]; 
} 

moje pytanie brzmi: w jaki sposób mogę odzyskać przedmiot książki tj booklist.title, .author, .ISBN w określonym indeksem w myarray.

Odpowiedz

26

z tym kodem? Niemożliwe, ponieważ dodać taką samą bookList przez resztę czasu (aż nie ma więcej pamięci)

Z kodu bez nieskończonych pętli byłoby użyć

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

W realnym scenariuszu pętli while jest strumień tekstu, więc podczas gdy strumień tekst jest prawdą. Deklarowałem myarray w pliku .h i pliku .m Mam pewne funkcje, które wywołują myarray. po przypisaniu wartości wywołałem [myarray ObjectAtIndex: index], ale otrzymałem "SIGABRT" w kodzie xcode. – Drew

+0

jeśli nie napiszesz prawdziwego kodu, nie mogę pomóc. Jeśli pojawi się błąd lub wyjątek, powinieneś opublikować dokładny kod, który spowodował ten wyjątek. –

+0

to jest dokładnie lineBook * aBook = [myArray objectAtIndex: index]; – Drew

2

Może to nie pomaga w ogóle, ale ja pamiętam kłopoty kiedy nie rzucając jednocześnie ciągnąc obiektów z tablic ...

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

to może pomóc, nie może ... i wiem, że ten post jest stary, ale może to pomoże ktoś ..

.scott

+0

Tak. To trzeba zrobić w przeszłości. Wierzę, że zwraca (id) i odlewanie pomaga. –

0

masz ten rozciąga jeśli chcesz

utworzyć plik extends.h dodać ten kod i #import "extends.h" w projekcie:

/*______________________________ 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 

USE:

NSObject object = [self.arrayItem getAt:0]; 
NSObject object2 = [self.arrayItem getAt:50]; 
Powiązane problemy