2

NSString を返すはずのコードがいくつかあります。代わりに、NSArrayReverseEnumerator を返すことがあります。これにより、認識されないセレクターがインスタンス例外に送信されます。

NSString *tFirstName = nil;
NSString *tUsername = ((NSString*)[self.userObject objectForKey:USER_NAME]).length > 0 ? [self.userObject objectForKey:USER_NAME] : [self.userObject objectForKey:USER_USERNAME];
NSRange spaceRange = [tUsername rangeOfString:@" "];
if (spaceRange.location == NSNotFound) {
    tFirstName = tUsername;
} else {
    tFirstName = [tUsername substringToIndex:spaceRange.location];
}
return tFirstName;

次に、UITextField テキスト プロパティを返されたものに設定しているため、例外が発生します。

例外は次のとおりです。

-[__NSArrayReverseEnumerator isEqualToString:]: 認識されないセレクターがインスタンス 0xf1b8190 に送信されました

スタック トレースの最後の数行を次に示します。

 CoreFoundation 0x381208bf __exceptionPreprocess + 163
1 libobjc.A.dylib 0x31c061e5 objc_exception_throw + 33
2 CoreFoundation 0x38123acb -[NSObject doesNotRecognizeSelector:] + 175
3 CoreFoundation 0x38122945 ___forwarding___ + 301
4 CoreFoundation 0x3807d680 _CF_forwarding_prep_0 + 48
5 UIKit 0x354dc20d -[UILabel setText:] + 45
6 Trivial 0x000873c9 -[vcGameOver viewDidLoad] (vcGameOver.m:45)
7 UIKit 0x355117ff -[UIViewController view] + 167

通常、userObject は次のように表示されますが、デバッガーで再現できず、例外が発生したときにどのように表示されるかを確認できませんでした。

userObject は次のようになります。

(PFUser *) $1 = 0x0be86fb0 <PFUser:MTsJR1DKuS> {
    answeredCorrect = "<PFRelation: 0xa847f30>";
    centsEarned = "-2353";
    centsPaidFor = 5000;
    centsUsed = 4193;
    correctAnswers = 1454;
    earnedCoinDate = "2012-06-12 19:42:44 +0000";
    eloRating = 1262;
    iq = 119;
    lastPlayedDate = "2012-06-12 19:15:46 +0000";
    locale = en;
    losses = 10;
    name = "Matt Hudson";
    status = 0;
    username = Inturbidus;
    wins = 8;
    wrongAnswers = 1157;
} 

私の質問は、上記のコードのどの行が NSArrayReverseEnumerator を返す可能性があるかということです。

4

1 に答える 1

0

時期尚早にリリースされたインスタンスがあったメモリ内の場所に他のオブジェクト (この場合、おそらく private-to-Apple ) がしゃがんでいるダングリング ポインターがある可能性があります。__NSArrayReverseEnumeratorNSString

NSZombieEnabledゾンビ ( ) をオンにして、表示されたエラー メッセージの代わりにmessage sent to deallocated instance" " エラー メッセージが表示されるかどうかを確認することをお勧めします。

于 2012-06-12T23:53:36.807 に答える