Snow Leopard で問題なく NSXMLParser サブクラスを 6 か月以上使用しています。Mavericks に移植すると、突然、インポート操作の途中で奇妙なクラッシュが発生し始めました。Zombies を使用して問題を確認したところ、NSXMLParser のプロトコル メソッドの elementName パラメータが時期尚早に割り当て解除されているようです。これが方法です。
- (void) parser: (SmartParser *) parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
if (nil != elementName) {
NSLog(@"STARTING: elementName is %@\n", elementName); // <= error here
if ([elementName isEqualToString: @"Root"]) {
[ elementName 値の一連のチェックが続きます。ちなみに、 if (nil != elementName) { check とそれに続く NSLog ステートメントは、エラーを特定するためにのみ追加されました。
私が得るエラーメッセージは次のとおりです。
ゾンビを実行すると、次のようになります: elementName NSString * class name = _NSZombie_CFString 0x0000600000c326c0
そのため、elementName が Zombie 文字列に変換されているようです。elementName はプロトコル メソッドによって提供されるパラメーターであるため、決して変更しません。私のプロトコルメソッドの残りの部分はかなり標準的です。
奇妙なことに、まったく同じコードが El Capitan のまったく同じデータに対して正常に動作するように見えますが、今のところは Mavericks で作業する必要があります。また、データがすべて単純な XML であり、過去に何度も問題なく使用されていたとしても、一部のデータでは発生しますが、他のデータでは発生しません。何が起こっているのか誰にも分かりませんか?これは、Mavericks に固有の奇妙な構成の問題である可能性があります。助けてくれてありがとう。