0

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 に固有の奇妙な構成の問題である可能性があります。助けてくれてありがとう。

4

1 に答える 1

0

OK、これはやや不満ですが、ARC に切り替えることで問題を「解決」しました。バックグラウンド操作で実行しない限り、インポートは正常に機能しているようです。

私のパーサーがどのようにメモリに残ることができるかを実際には説明していませんが、Apple の elementName 変数の割り当てが解除されていました。

于 2016-02-04T05:01:29.113 に答える