簡體   English   中英

iPhone Obj-C - 從NSMutableArray中檢索自定義對象

[英]iPhone Obj-C - Retrieve custom object from NSMutableArray

有:

@interface MyClass : NSObject {
    NSString *name; // retained and synthesized
    NSString *address; // retained and synthesized
} 

我正在創建一個數組:

NSMutableArray *myArray; // retained and synthesized

用幾個MyClass對象填充它:

MyClass *kat = [MyClass new];
kat.name = @"somestring";
kat.address = @"someotherstring"
[myArray addObject:kat];
[kat release];

如何在某個索引處獲取對象? 下面的代碼一直給我null,但它應該說明我需要的東西..

MyClass *obj = (MyClass*)[myArray objectAtIndex:5];
NSLog(@"Selected: %@", obj.address); // = null :(

鑄造有什么問題,或者我忘了什么?

MyClass *obj = (MyClass*)[myArray objectAtIndex:5];
NSLog(@"Selected: %@", obj.address); // = null :(

如果該代碼是打印(null) ,則不能是因為該數組為空或objectAtIndex:失敗。 objectAtIndex:如果您嘗試訪問超出數組中對象計數的索引並且數組不能包含“holes”或nil引用,則會拋出范圍異常。

代碼在沒有發生事故的情況下運行的唯一方法是:

  • myArray是零; 您沒有為myArray分配和/或分配數組實例。

  • obj.address返回nil; 你沒有正確初始化實例(它看起來你做了)。

僅僅在@ property / @ synthesize對中聲明myArray是不夠的。 你需要myArray也是非零的。 你需要添加myArray = [[NSMutableArray alloc] init]; [addObject:]調用之上的某處。

此外,由於您已將“myArray”變量聲明為retain,如果您通過self.myArray = otherArray將另一個(非零)數組設置為myArray, self.myArray = otherArray myArray將為非零並保留並准備接受對象。

另外,如果你分配myArray,不要忘記在你的類的dealloc方法中釋放它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM