在“nsstring *”类型的对象上找不到读取字典元素的预期方法
Posted
技术标签:
【中文标题】在“nsstring *”类型的对象上找不到读取字典元素的预期方法【英文标题】:expected method to read dictionary element not found on object of type 'nsstring *' 【发布时间】:2015-02-11 11:11:25 【问题描述】:我正在尝试使用文本字段输入一些数字,然后让 Parse 服务器查找标记有在该字段中输入的任何数字标记的图像,但是当我收到这个大红色错误(在主题标题中)时尝试构建应用程序进行测试。这是我的代码:
-(IBAction)Submit:(id)sender
PFFile *people = TicketNumberBox.text[@"ticketNumber"];
[people getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error)
if (!error)
UIImageView TicketImage = [UIImage imageWithData:imageData];
];
这里有一张图片可以进一步帮助您:
【问题讨论】:
TicketNumberBox
是什么? UITextField
? UILabel
?所以TicketNumberBox.text
是NSString
,而不是NSDictionary
。你不能这样做TicketNumberBox.text[@"ticketNumber"]
。
是的。就像我之前说的,它是一个文本字段。
PFFile *people = TicketNumberBox.text;
?
约定是变量名以小写字母开头,类名以大写字母开头。在该 Objective-C 约定下,TicketNumberBox
看起来是行类名称并导致一些混乱。为了使事情更清楚,您可以编写:-(IBAction)Submit:(NSTextField *)sender
并使用 sender
作为文本字段指针:self.text
。
[@"ticketNumber"]
将用于引用 NSDictionary 的元素。 NSString 不是 NSDictionary。
【参考方案1】:
TicketNumberBox.text[@"ticketNumber"];没有任何意义,因为 UITextField 中的文本变量是 NSString 类型,而不是字典类型,所以你不能像这样取 ticketNumber 值。你可以把你的代码分成这样的东西来理解:
NSString *text = TicketNumberBox.text;
PFFile *people = text[@"ticketNumber"];
这对你还有意义吗?
更可信的是:
NSString *text = TicketNumberBox.text;
PFFile *people = [PFFile alloc] init];
people.ticketNumber = text;
【讨论】:
【参考方案2】:someString[@"this is the string I want to set"]
中的语法是您在 NSDictionary 中请求键值的方式@“这是我要设置的字符串”,这就是您收到特定错误的原因。但是,字符串不是字典,因此编译器会抱怨您试图将字符串作为字典键来寻址。混淆的元素是字典可以使用字符串作为键。所以要引用字典:NSDictionary *dictionary = @@"key":"@"value";
你使用语法NSString *string = dictionary[@"key"]
返回@"value",使"string" 等于@"value"。
【讨论】:
以上是关于在“nsstring *”类型的对象上找不到读取字典元素的预期方法的主要内容,如果未能解决你的问题,请参考以下文章
从缓存中读取查询导致在对象未定义上找不到字段 <field>
在“RKObjectManager”类型的对象上找不到属性“managedObjectStore”
在“CBPeripheral *”类型的对象上找不到属性“uuid”