2011-03-08 37 views
11

giả định sau:có được các đối tượng trong 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]; 
} 

câu hỏi của tôi là làm thế nào để lấy đối tượng của SÁCH tức là booklist.title, .author, .ISBN tại một chỉ số nhất định trong myarray.

Trả lời

26

bằng mã này? Impossible, bởi vì bạn thêm cùng một Booklist cho phần còn lại của thời gian (cho đến khi không có thêm bộ nhớ)

Với mã mà không vòng lặp vô hạn bạn sẽ sử dụng

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

Trong trường hợp thực là vòng lặp while là luồng văn bản, do đó luồng văn bản là đúng. Tôi đã khai báo myarray trong tệp .h và tệp .m Tôi có một số hàm gọi là myarray. sau khi gán các giá trị, tôi gọi là [myarray ObjectAtIndex: index] nhưng tôi nhận được một "SIGABRT" trong xcode. – Drew

+0

nếu bạn không đăng mã thực mà tôi không thể trợ giúp. Nếu bạn gặp lỗi hoặc ngoại lệ, bạn nên đăng mã chính xác đã gây ra ngoại lệ đó. –

+0

đây là lineBook chính xác * aBook = [myArray objectAtIndex: index]; – Drew

2

này có thể không giúp gì cả, nhưng tôi nhớ gặp khó khăn khi không đúc trong khi kéo vật ra khỏi mảng ...

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

nó có thể giúp đỡ, có thể không ... và tôi biết bài này là cũ, nhưng có lẽ nó sẽ giúp một ai đó ..

.scott

+0

Có. Đây là điều phải làm trong quá khứ. Tôi tin rằng nó trở lại (id) và đúc nó giúp. –

2

Bắt đầu với Xcode 4.5 (và Clang 3.3), bạn có thể sử dụng Objective-C Literals:

Book *firstBookInArray = myArray[0]; 
0

Bạn có điều này kéo dài nếu bạn muốn

Tạo tập tin extends.h thêm mã này và #import "extends.h" trong dự án của bạn:

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

SỬ DỤNG:

NSObject object = [self.arrayItem getAt:0]; 
NSObject object2 = [self.arrayItem getAt:50]; 
Các vấn đề liên quan