我想将一个浮动复制到粘贴板中,但重要的是值,因为我想稍后将其粘贴在数字中,作为数字。
试过:
[pasteboard setValue:SomeNSNumberWhereIStoredTheFloat forPasteboardType:@"NSNumber"];
有了它,它没有任何东西可以粘贴,而pasteboard.string = numberInStringValue
,它会将数字粘贴为一系列字符,这些都是我不感兴趣的。
感谢您的帮助
答案 0 :(得分:2)
粘贴板数据的“类型”不是类的名称,它是Uniform Type Identifier(UTI,或者只是UT,如果你还记得UTI代表的其他内容。)在这种情况下,你的数据没有关联的UTI(数字是抽象概念,而不是数据格式。)您必须找出存储该数字并检索它的最佳方法。
我认为在这种情况下,将数字格式化为字符串就足够了:
NSString *numString = [NSString stringWithFormat:@"%f", theFloatValue];
pasteboard.string = numString;
后来,当它回来时:
float theFloatValue2 = [pasteboard.string doubleValue];
这不会考虑检查nil
或其他错误处理。
如果您需要非常高的精度,则可能需要调查基于NSData
的存储技术。
答案 1 :(得分:0)
您可以直接存储NSNumber
。您可以使用API中的以下方法
<强>的setValue:forPasteboardType:强>
使用此方法将对象放在作为标准属性列表对象的粘贴板上,该对象是NSString,NSArray,NSDictionary,NSDate,NSNumber或NSURL类的对象。
<强> valueForPasteboardType:强>
此方法尝试返回适合于表示类型的类类型的对象,该类型通常是UTI。例如,如果表示类型是kUTTypePlainText(public.plain-text),则该方法返回NSString对象。如果方法无法从表示类型确定类类型,则它将对象作为通用属性列表对象返回。属性列表对象包括NSString,NSArray,NSDictionary,NSDate或NSNumber对象,NSURL对象也是可能的。如果方法无法将值解码为属性列表对象,则它将粘贴板项目作为NSData对象返回。
真正的问题在于找到正确的UTI,因此课程会自动返回NSNumber
而不是给你一个NSData
对象。
更糟糕的是,代码似乎不像文档中所宣传的那样工作。我从几个人那里听说这个方法总是会给你NSData
。您可以在此answer中找到此类问题的示例(以及解决方法)。
答案 2 :(得分:0)
您可以将浮动值存储为NSNumber。 但是NSNumber没有正确存储在UIPasteboard中,尽管文档说明了它(bug?)。
要将NSNumber保存在UIPasteboard中,您应该将NSNumber存档到NSData,并从UIPasteboard中检索NSNumber,您应该将NSData解压缩回NSNumber。
// adding data to pasteboard
NSNumber *number = [NSNumber numberWithDouble:floatValue]; // store your value here
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:number]; // archive NSNumber to NSData
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:data, @"yourKey",nil];
[[UIPasteboard generalPasteboard] addItems:[NSArray arrayWithObject:dict]];
// retrieving data
NSData *data = [dict valueForKey:@"yourKey"]; // here dict is properly obtained NSDictionary of pasteboard object
NSNumber *number = [NSKeyedUnarchiver unarchiveObjectWithData:data]; // unarchive NSData to NSNumber