我的应用程序创建和存储EKEvents
到标准的日历数据库阻止用户,但是,我发现,如果我用表情的“笔记”的事件,它尝试从日历中读取事件时会导致崩溃。的UITextField - 打字非标准字符(如表情符号)
我不希望或需要在的event.notes
使用表情符号。我碰巧正在测试,当它让我保存事件时,我感到非常震惊。
所以我觉得我的问题是可以解决的2路,均未我已经能够找出一个(大头贴甚至在自己的日历显示)。
1)我可以禁用或隐藏的自定义键盘按键? < --I'd喜欢这种解决方案
2)如果没有,我如何创建一个字符集,包括所有的在所有的标准键盘的可能的字符来检查的时候做对确定用户没有输入表情符号?
我试过使用一些标准字符集来检查,如alphanumericCharacterSet
,但是使用它,我无法输入空格。
下面是我使用至今,所要检查的字符用户键入代码:
- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (string.length == 0) {
return YES;
}
NSCharacterSet *myCharSet = [NSCharacterSet alphanumericCharacterSet];
for (int i = 0; i < [string length]; i++) {
unichar c = [string characterAtIndex:i];
if ([myCharSet characterIsMember:c]) {
return YES;
}
}
UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Invalid Input" message:@"Oops! You can't use that character." delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
[av show];
return NO;
}
编辑:澄清错误
没有错误,只有一次崩溃。 我的应用程序保存日历事件,并将它们以列表形式显示给用户。 然后,用户可以将事件标记为“已付”或“未付款”,此时我将一个字符串附加到事件“ - 付费”的.notes
属性中。当我重新加载表格时,如果支付了事件,它会向用户显示一个特定的图标。 当保存甚至有一个表情符号作为.notes
财产,我尝试追加.notes
的崩溃发生。
NSMutableCharacterSet *myCharSet = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
[myCharSet formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet];
这里是可用的字符集列表可供选择:
如果事件说明中有表情符号字符,您会得到什么错误?你最好的解决方案可能是解决这个问题。 – rmaddy 2013-02-10 17:19:00
@rmaddy它不是一个错误,他只是不想要它,干净的文本会被有趣的图标 – raceworm 2013-02-10 17:23:55
@rmaddy,请参阅我的编辑。我解释了到底发生了什么。 – jhilgert00 2013-02-10 17:24:51