1

nsobject をセグメント コントロールにバインドしようとすると、このエラーが発生し続けます

UserLocation isEqualToString:]: unrecognized selector sent to instance 0x7477a60
2013-01-22 12:44:58.115 Momentum[39936:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UserLocation isEqualToString:]: unrecognized selector sent to instance 0x7477a60'

コア データ オブジェクトにデータがあることを確認しました。

NSarray *arrayuserlocation = [[MMIStore defaultStore] loadAllUserLocation];
UISegmentedControl *segControl = [[UISegmentedControl alloc]initWithItems:arrayuserlocation];
[segControl addTarget:self action:@selector(didChangeSegmentControl:)      forControlEvents:UIControlEventValueChanged];
[segControl setSegmentedControlStyle:UISegmentedControlStyleBar];
[segControl setTintColor:[UIColor grayColor]];

編集

下の質問の答えに

- (NSMutableArray *)loadAllUserLocation
{
    if (!allItems) {NSFetchRequest *request = [[NSFetchRequest alloc] init];

    NSEntityDescription *e = [[model entitiesByName] objectForKey:@"UserLocation"];
            [request setEntity:e]
    NSError *error;
        NSArray *result = [context executeFetchRequest:request error:&error];
        if (!result) {
            [NSException raise:@"Fetch failed"
                        format:@"Reason: %@", [error localizedDescription]];
        }

        allItems = [[NSMutableArray alloc] initWithArray:result];
}
 return allItems;

配列を返します

以下を実行することで問題を解決できました。

 NSArray *arraylocation = [[MMIStore defaultStore] loadAllUserLocation];
    NSMutableArray *newarray = [[NSMutableArray alloc] init];
    for (UserLocation *user in arraylocation)
    {

        NSLog(@"%@ found", user.locationNm);
        [newarray addObject:user.locationNm];

    }

また、セグメント コントロールのデータソースとして newarray を使用します。

4

3 に答える 3

1

コメントで述べたように、問題は、必要なオブジェクトの代わりにオブジェクトを渡していることuserlocationです。NSStringUIImage

ドキュメントによると、items 配列は「NSString オブジェクト (セグメント タイトルの場合) または UIImage オブジェクト (セグメント イメージの場合) の配列」である必要があります。

次のように、ユーザーの場所から文字列を取得する必要があります。

NSarray *arrayuserlocation = [[[MMIStore defaultStore] loadAllUserLocation] valueForKey:@"locationNm"];//use the param name here

これにより、オブジェクトの配列からすべての文字列の配列が得られます。

于 2013-01-22T19:54:49.523 に答える
0

例外をスローしているコードは、それを渡すことを期待していますNSString(これは に応答するオブジェクトですisEqualToString:)。ただし、UserLocationオブジェクトを渡しています。オブジェクト自体の配列を送信するだけでなくarrayuserlocation、オブジェクトから文字列を読み込む必要があります。UserLocation

于 2013-01-22T19:46:13.470 に答える
0

問題は、arrayuserlocation配列NSStringに ではなく s が含まれている必要があることですNSManagedObjects

于 2013-01-22T19:44:39.513 に答える