2012-01-19 39 views
0

我已經設置了一個Singleton(有很多StackOverflow的幫助) 但是當我嘗試修改/訪問數組「listOfHeadings」時,似乎沒有任何變化。 我從編譯器或運行時不會收到錯誤或警告。無法修改Singleton中的數組

我在我的GlobalData.h得到這個:

#import <Foundation/Foundation.h> 

@interface GlobalData : NSObject {  
    NSMutableArray *listOfHeadings; 
}  
@property(nonatomic,retain)NSMutableArray *listOfHeadings; 
+(GlobalData*)getInstance; 
@end 

這是我GlobalData.m:

#import "GlobalData.h" 

@implementation GlobalData 
@synthesize listOfHeadings; 
static GlobalData *instance; 

+(GlobalData *)getInstance{  
    @synchronized(self){  
     if(!instance){  
      instance= [[GlobalData alloc] init]; 
      instance.listOfHeadings=[[NSMutableArray alloc]init]; //EDIT: This line added to resolve problem 
     }  
    }  
    return instance;  
}  
@end 

我訪問辛格爾頓我AppDelegate.m:

#import "GlobalData.h" 
...inside didFinishLaunchingWithOptions... 
    GlobalData *globDat=[GlobalData getInstance]; 
    [globDat.listOfHeadings addObject:@"Message Settings"]; 
    NSLog(@"appdel m array test %i",[globDat.listOfHeadings count]); // prints 0! 

很清楚,我做錯了什麼 - 可以幫助指出我的錯誤嗎? 謝謝。

回答

1

listOfHeadings是否有效並實例化?

(注:你可以調用一個nil對象的方法與對象 - 沒有錯誤!)

+0

是不是在GlobalData.h文件中處理? – wayneh

+0

不在您在問題中顯示的代碼中。你所做的只是聲明你有一個可變數組,你需要在某個地方實際分配/初始化它。 – jrturton

+0

明白了 - 我在其他線索中找到示例代碼...謝謝! http://stackoverflow.com/questions/6324732/using-a-singleton-to-create-an-array-accessible-by-multiple-views – wayneh

1

您需要具備以下條件:

- (id)init { 
    if ((self = [super init])) { 
     self.listOfHeadings = [NSMutableArray array]; 
    } 
    return self; 
} 

- (void)dealloc { 
    [listOfHeadings release]; 

    [super dealloc]; 
} 

創建屬性只是讓你listOfHeadings陣列可用於其他類,並確保它不會被刪除。您仍然需要創建該對象,這是在init方法中完成的。由於財產被保留,您需要釋放它(注意 - 不需要自己的時候)以避免泄漏。

+0

有人可以修復我的格式 - iOS不適合縮進! – jrtc27

+0

明白了 - 我發現了其他線程中的示例代碼...謝謝! http://stackoverflow.com/questions/6324732/using-a-singleton-to-create-an-array-accessible-by-multiple-views – wayneh

+0

我剛剛編輯我的原始帖子與另一個線程的修復。 – wayneh