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对象而不是所需的NSString对象UIImage

根据文档,您的 items 数组应该是“NSString 对象(用于段标题)或 UIImage 对象(用于段图像)的数组”。

您需要从用户位置获取字符串,

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

这应该为您提供对象数组中所有字符串的数组。

于 2013-01-22T19:54:49.523 回答
0

问题是,arrayuserlocation数组应该包含NSStrings 而不是NSManagedObjects.

于 2013-01-22T19:44:39.513 回答
0

抛出异常的代码期望您将其传递给它NSString(这是响应的对象isEqualToString:)。但是,您正在向它传递一个UserLocation对象。您需要arrayuserlocation从对象中加载字符串UserLocation,而不仅仅是发送对象数组本身。

于 2013-01-22T19:46:13.470 回答