Soru [NSCFNumber isEqualToString:]: örneğe gönderilen tanınmayan seçici


Tamam, aşağıdaki ortak sorunu yaşıyorum

[NSCFNumber isEqualToString:]: unrecognized selector sent to instance

ama bu sefer nasıl tamir edeceğimi bilmiyorum.

İşte beyanname viewDidLoad:

- (void)viewDidLoad {

    [super viewDidLoad];

    NSMutableArray *tempHours = [NSMutableArray array];
    for (int i = 0; i < 12; i++) { 
        [tempHours addObject:[NSNumber numberWithInt:(i+1)]];
    }
    self.hours = tempHours; // 'hours' is a synthesized NSArray property of the ViewController
    [tempHours release];

  // two more similar array declarations here

}

Burada, öğelerin kırıldığı UIPickerView kod yöntemi (ör. if Beyan)

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

    NSString *stringIndex = [NSString stringWithFormat:@"Row #%d", row];

    if(component == 0) {
        return stringIndex = [self.hours objectAtIndex:row];
    }

    // more code for other components (of the same form) here

    return stringIndex;
}

Sanırım dizilerden türedilmiş NSNumber nesnelerime ihtiyacım var. Bunu bu ifadeyle düzgün bir şekilde nasıl yaparım?

stringIndex = [self.hours objectAtIndex:row];

Teşekkürler!


25
2017-07-29 16:50


Menşei


N.B. Serbest bırakmamalısın tempHours içinde viewDidLoad. Sahibi olmadın çünkü onu sen yaratmadın. - albertamg


Cevaplar:


return [NSString stringWithFormat:@"%@",[self.hours objectAtIndex:row]];

42
2017-07-29 16:54



Evet, bu işe yaradı, teşekkürler! - ArtSabintsev
Aynı hatayı aldım ama bu benim için çalışmadı. stringValue şunu yaptı: stackoverflow.com/a/9586079/956397 - PiTheNumber


Bir geri dönüyorsun NSNumber olduğu gibi olduğu gibi self.hours. Gibi NSString bir dize oluşturduğunuz beklenen dönüş değeri:

[NSString stringWithFormat:@"%@", [self.hours objectAtIndex:row]];

veya niyetinizi yeniden değerlendirmek. Gerçekten bu şekilde indeksleri depolamak mı yoksa saklamak mı istediniz? NSStrings?


8
2017-07-29 16:58



Bu işe yaradı! Teşekkürler! - ArtSabintsev
Sayıları saatlerce saklamak istedim. Dakikalar boyunca, dizeleri saklamak için nee'larım var, çünkü 1-9 arası rakamlar için 0'ları önceden tahmin ediyorum. Daha sonra, değerleri uygularken değerleri tekrar okumak zorunda kalacağım. didSelect: yöntem - ArtSabintsev


Birisi bu sorunu yaşıyorsa ve özellikle de bir satırın dizinini döndürüyorsa, aşağıdakileri yaparak her zaman NSNumber'i bir dizgiValue olarak dönüştürebilirsiniz:

NSString *code = [[[JSONResponse objectForKey:@"meta"] objectForKey:@"code"] stringValue];

Bir yerleştirme stringValue Yöntemin sonunda bir şeyi bir dizeye dönüştürür, ayrıca kullanabilirsiniz intValue.


2
2017-12-19 16:48





Yorum Yap [tempHours release];// o otomatikleştirilmiş nesne. Kullanmadınız ve tahsis ya da kopya ile ya da yeni ile kullanmadınız:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableArray *tempHours = [NSMutableArray array];

    for (int i = 0; i < 12; i++) { 
        [tempHours addObject:[NSNumber numberWithInt:(i+1)]];
    }

    self.hours = tempHours; // 'hours' is a synthesized NSArray property of the ViewController

    // [tempHours release];
}

daha fazla u diziye NSNumber eklediniz yani dize değerine dönüştür:

stringIndex =[NSString stringWithFormat:@"%@",[self.hours objectAtIndex:row]];

2
2017-07-29 16:54



Hayır, hala çalışmıyor. Bu hatayı atar -[NSCFString stringValue]: unrecognized selector sent to instance - ArtSabintsev
bu yüzden saat dizisine bazı dize ekledik. stringwithformat yukarıdaki gibi kullanmak - Vijay-Apple-Dev.blogspot.com
Evet, hepsi tamir edildi. Teşekkürler! - ArtSabintsev
hoşgeldin dostum ........ - Vijay-Apple-Dev.blogspot.com
hey dostum u sürüm problemi belirttim - Vijay-Apple-Dev.blogspot.com