我有一個表視圖控制器,並在其初始化過程中設置了一個NSArray屬性,然後在cellForRowAtIndexPath
方法中使用該屬性來顯示錶上的數據。調用保留屬性時,TableViewController會崩潰嗎?
但是,當我觸摸一排,一旦我把這個保留的NSArray屬性稱爲EXC_BAD_ACCESS!
FYI的屬性被定義爲如下所示,並使用自定義getter函數:
@property (nonatomic,retain) NSArray *dataList;
並在.m文件:
@synthesize dataList;
- (NSArray *)dataList
{
if (!dataList)
{
NSString *p = [kind lowercaseString];
NSString *s = [[NSBundle mainBundle] pathForResource:p ofType:@"txt"];
NSLog(@"%@",s);
NSData *dataRep = [NSData dataWithContentsOfFile:s];
NSPropertyListFormat format;
dataList = [NSPropertyListSerialization propertyListFromData: dataRep
mutabilityOption: NSPropertyListImmutable
format: &format
errorDescription: nil];
if (dataList.count == 0)
NSLog(@"Fetch failed!");
}
return dataList;
}
任何建議?
你可以發佈更多的代碼?比如你的自定義getter函數? – GendoIkari
你需要在這裏發佈更多的代碼。要麼你有一個重寫的getter/setter,或者你錯誤地處理了其他地方的數組保留計數。 –
您可能也希望將其轉換爲複製屬性。這意味着如果您將一個NSMutableArray分配給該屬性,然後對該數組進行變異,則該數組的屬性版本將不會發生變異。如果你指定一個不可變的NSArray,那麼這個副本就像保留一樣。 –