在“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.textNSString,而不是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>

在 GLKView 类型的对象上找不到属性“层”

在“RKObjectManager”类型的对象上找不到属性“managedObjectStore”

在“CBPeripheral *”类型的对象上找不到属性“uuid”

在类型的对象上找不到 Restkit 2.0 'managedObjectContext'

在“ViewController”类型的对象上找不到属性引用?