我有一個符合NSCoding的自定義對象,因爲該對象在終止時應該可寫入磁盤。在這個類中,我擁有各種屬性,包含Ncotrings,NSArrays,NSDictionaries等可可對象類型。一個特定的屬性是這一個:尷尬:encodeObject與Array會導致EXC_BAD_ACCESS錯誤,絕望
@property (readwrite, copy) NSArray *artistReleases;
它實際上是一個數組,它應該容納一些NSDictionaries。這些字典是在負責解析XML文件數據的類方法中創建的。
[encoder encodeObject:artistReleases forKey:@"artistReleases"];
我會得到一個EXC_BAD_ACCESS錯誤:
artist.artistReleases = [NSArray arrayWithArray:releases];
的錯誤,當我試圖將財產保存我的編碼器發生。 NSZombie告訴我
*** -[CFString retain]: message sent to deallocated instance 0xd6f28fe0
......我絕對沒有想法在哪裏尋找這個保留。 malloc_history告訴我:
ALLOC 0xd6f28fe0-0xd6f28fff [size=32]: thread_b0244000 |thread_start |
_pthread_start | __NSThread__main__ | -[NSThread main] |
-[SearchViewController invokeGetArtist:] | +[GetDetails getArtist:summary:theURL:] |
-[CXMLNode stringValue] | +[NSString stringWithUTF8String:] |
-[NSPlaceholderString initWithBytes:length:encoding:] |
CFStringCreateWithBytes | __CFStringCreateImmutableFunnel3 |
_CFRuntimeCreateInstance | GMmalloc_zone_malloc_internal
我沒有具體的想法來製作它。這對我沒有任何意義。也許有人可以通過解釋malloc歷史來指向某個方向。
編輯
這裏就是填充有關財產的一部分。爲了修正錯誤,我評論了一些CXMLNode調用,並沒有在這裏插入這些調用。這也意味着這些對象似乎沒有錯誤(直到我嘗試訪問使用這些方法創建的數據)。順便說一下,我使用TouchXML進行XPath查詢。
NSArray *releaseNodes;
releaseNodes = [root nodesForXPath:@"/pathToReleases" error:nil];
NSMutableArray *releases = [[NSMutableArray alloc] init];
for (CXMLElement *resultElement in releaseNodes) {
if (resultElement != nil) {
NSMutableDictionary *releaseElement = [[NSMutableDictionary alloc] init];
for (int counter = 0; counter < [resultElement childCount]; counter++) {
[releaseElement setObject:[[resultElement childAtIndex:counter] stringValue] forKey:[[resultElement childAtIndex:counter] name]];
}
[releases addObject:releaseElement];
[releaseElement release];
}
}
if ([releases count] == 0)
[releases addObject:[NSMutableDictionary dictionaryWithObject:@"-" forKey:@"title"]];
artist.artistReleases = [NSArray arrayWithArray:releases];
EDIT 2 如有關財產失去其內容我已經收窄。 po'ing錯誤
Program received signal SIGTRAP, Trace/breakpoint trap.
這點是這對getArtist的調用創建的自動釋放池得到釋放通過GDB結果的某一點後的財產。所有其他屬性都很好,但是......所有 - 錯誤在於我在第一次編輯中發佈的代碼部分?
我編輯了我原來的帖子,添加了一些更多的代碼。 getArtist應該只返回Artist對象,摘要最終將被保存爲藝術家對象的屬性。 – ff10 2009-12-29 01:04:07