2011-04-30 61 views
0

我有一個字符串(titleName)存儲在一個類(newNoteBook)存儲在一個數組(myLibrary)。我試圖訪問它,但我只在日誌中打印(空)。如何訪問存儲在數組中的類中的字符串?

我在做什麼錯?

-(void) setupLibrary { 

    NoteBook *newNoteBook = [[NoteBook alloc] init]; 

    newNoteBook.titleName = @"TEST"; 
    NSLog(@"titleName:%@", newNoteBook.titleName); // this prints TEST in the log 
    [myLibrary addObject:newNoteBook]; 
    NSLog(@"titleName:%@", [[self.myLibrary objectAtIndex:0] titleName]); // this prints (null) in the log) 
} 

沒有什麼花哨的在我的課......簡單地說:

@interface NoteBook : NSObject { 

NSString *titleName; } 


@property (nonatomic, retain) NSString *titleName; 
@end 

@implementation NoteBook 
@synthesize titleName; 

回答

1

可能的原因:

  • myLibrary(實例變量)是nil;
  • self.myLibrarynil或其後臺實例變量不是myLibrary;
  • [self.myLibrary objectAtIndex:0]newNoteBook不同,因爲self.myLibrary中至少有一個其他元素。

編輯:你需要創建一個新的可變數組,並將其分配給你的財產/實例變量myLibrary

self.myLibrary = [NSMutableArray array]; 

myLibrary = [[NSMutableArray alloc] init]; 

,你應該這取決於你的班級如何使用。如果你的類的實例應該始終有有效的myLibrary,一個好地方這樣做是-init

- (id)init { 
    self = [super init]; 
    if (self) { 
     myLibrary = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 

另外,如果你想懶洋洋地創建myLibrary只有當執行-setupLibrary,該方法創建它:

-(void) setupLibrary { 
    self.myLibrary = [NSMutableArray array]; 

    NoteBook *newNoteBook = [[NoteBook alloc] init]; 
    … 
} 

不要忘了釋放它在你的-dealloc方法:

- (void)dealloc { 
    [myLibrary release]; 
    [super dealloc]; 
} 
+0

謝謝,但我該如何實現myLibrary或self.myLibrary不是零?到目前爲止,myLibrary所做的一切都是我在頭文件中聲明瞭它爲'NSMutableArray * myLibrary; @property(nonatomic,retain)NSMutableArray * myLibrary;'和實現'@synthesize myLibrary;'。至於第三個可能的原因:這是第一個添加到myLibrary的對象,所以我想不能有另一個。對不起,如果這是基本的,但我不明白。非常感謝你的幫助! – 2011-04-30 09:31:52

+0

剛解決它...它必須是myLibrary = [[NSMutableArray alloc] init]; ... 我早該知道! – 2011-04-30 09:33:49

+0

還要感謝關於不需要類型轉換的說明......它看起來太複雜了。 – 2011-04-30 09:36:53

2

試試這個

NSLog(@"titleName:%@", ((NoteBook *)[self.myLibrary objectAtIndex:0]).titleName); 
+1

由於'-objectAtIndex:'是'id'的返回類型,所以不需要類型轉換。 – 2011-04-30 09:32:22

1

我覺得你不是類型從數組鑄造對象 -

NSLog(@"titleName:%@", [(NoteBook*)[self.myLibrary objectAtIndex:0] titleName]); 

和添加對象之前,您應該ALLOC你的陣列 -

myLibrary = [[NSMutableArray alloc] init]; 
+0

由於'-objectAtIndex:'是'id'的返回類型,所以不需要類型轉換。 – 2011-04-30 09:32:28

+0

謝謝,我當然沒有分配myLibrary!謝謝你的幫助。至於類型轉換,NSLog(@「titleName:%@」,[[self.myLibrary objectAtIndex:0] titleName]);工作得很好,看起來(在我的初學者眼裏)比你所說的要複雜一點? – 2011-04-30 09:34:58

1
NSLog(@"titleName:%@", [self.myLibrary objectAtIndex:0].titleName); 

正如他們在不需要施放之前所說的那樣是正確的。

相關問題