0

私のアプリはviewcontrollerにアクセスし、2つの自動サーバーリクエストを作成し、接続を確立し、データを取得して正しく表示し、完了です. ユーザーが「いいね」ボタンをクリックすると、さらに 2 つのサーバー要求が行われ、成功しました。表示は正しいです。行われるべきです。その後、次のエラーでクラッシュします。

[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance

私は非常に便利な SimplePost クラス (Nicolas Goles による) を使用しています。これが私のリクエストで、どちらもviewDidLoadで呼び出されます:

- (void) setScore {
    Profile *newPf = [[Profile alloc] initID:thisUser profil:@"na" scor:score];
    NSMutableURLRequest *reqPost = [SimplePost urlencodedRequestWithURL:[NSURL URLWithString:kMyProfileURL] andDataDictionary:[newPf toDictPf]];
    (void) [[NSURLConnection alloc] initWithRequest:reqPost delegate:self];
}
- (void) saveHist {
    History *newH = [[History alloc] initHistID:thisUser hQid:thisQstn hPts:score hLiked:NO];
    NSMutableURLRequest *reqHpost = [SimplePost urlencodedRequestWithURL:[NSURL URLWithString:kMyHistURL] andDataDictionary:[newH toDictH]];
    (void) [[NSURLConnection alloc] initWithRequest:reqHpost delegate:self];
}

私のカスタム クラス (プロファイルと履歴) の唯一の "新しい" ものは、hLiked の BOOL ですが、それは "機能" しています。データベースは正しく更新されています。
次に、ユーザーは「いいね」ボタン (+ または -) をクリックできます。他のリクエストは次のとおりです。

- (IBAction)likeClick:(id)sender {
    double stepperValue = _likeStepper.value;
    _likesLbl.text = [NSString stringWithFormat:@"%.f", stepperValue];
    [self updateLikes];
    [self updateHist];
}
- (void) updateLikes {
    //  update the question with the new "liked" score
    NSInteger likesN = [_likesLbl.text integerValue];
    Questn *qInfo = [[Questn alloc] initQwID:thisQstn askID:0 wCat:@"na" wSit:@"na" wAns1:@"na" wPts1:0 wAns2:@"na" wPts2:0 wAns3:@"na" wPts3:0 wAns4:@"na" wPts4:0 wJust:@"na" wLikes:likesN ];
    NSMutableURLRequest *reqPost = [SimplePost urlencodedRequestWithURL:[NSURL URLWithString:kLikesURL] andDataDictionary:[qInfo toDictQ]];
    (void) [[NSURLConnection alloc] initWithRequest:reqPost delegate:self];
}
- (void) updateHist {
    History *newH = [[History alloc] initHistID:thisUser hQid:thisQstn hPts:98989 hLiked:YES];
    NSMutableURLRequest *reqHpost = [SimplePost urlencodedRequestWithURL:[NSURL URLWithString:kHistURL] andDataDictionary:[newH toDictH]];
    (void) [[NSURLConnection alloc] initWithRequest:reqHpost delegate:self];
}

面倒ですよね?これが私の接続コードです:

//  connection to URL finished with Plist-formatted user data array returned from PHP
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSDictionary *array = (NSDictionary *)[NSPropertyListSerialization propertyListFromData:data mutabilityOption:NSPropertyListImmutable format:0 errorDescription:nil];
    BOOL keyLikeExists = [array objectForKey:@"likes"] != nil;
    if( keyLikeExists ) {
        _likesLbl.text = [array objectForKey:@"likes"];
    }
}
- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"Connection did fail." );
}

それはすべてうまく機能しますが、数秒後、まだ URL アクティビティが発生しているように、上記の「認識されないセレクター」エラーでクラッシュします。あってはならない。

この種のことを前に見た人はいますか?助けてくれてありがとう!

4

1 に答える 1

1

コードのどこかに method への呼び出しがありますisEqualToString:。そのメッセージが送信されているのはNSNumber、文字列ではなくオブジェクトです。オブジェクト型に関する論理上の問題があるか、文字列が過度に解放され、そのメモリが数値を保持するために再利用されているというメモリの問題があります。

呼び出しのコンテキストを見ないと、推測するのは困難です。

例外で中断した場合、スタック トレースによって、コード内のどこでエラーが発生したかがわかります。

于 2012-12-05T16:26:31.477 に答える