0

我想将浮点数复制到粘贴板中,但重要的是值,因为我想稍后将其粘贴为数字,作为数字。

试过:

[pasteboard setValue:SomeNSNumberWhereIStoredTheFloat forPasteboardType:@"NSNumber"];

有了它,它就没有什么可粘贴的了,而有了pasteboard.string = numberInStringValue,它将数字粘贴为一系列字符,我不感兴趣。

谢谢你的帮助

4

3 回答 3

2

粘贴板数据的“类型”不是类的名称,它是统一类型标识符(UTI,或者如果您记得 UTI 还代表什么,则只是 UT。)在这种情况下,您的数据没有关联的 UTI(数字是抽象概念,而不是数据格式。)您必须找出存储该数字并检索它的最佳方法。

我认为在这种情况下,将数字格式化为字符串就足够了:

NSString *numString = [NSString stringWithFormat:@"%f", theFloatValue];
pasteboard.string = numString;

后来,当它回来时:

float theFloatValue2 = [pasteboard.string doubleValue];

这不考虑检查nil或其他错误处理。

如果您需要非常高的精度,您可能需要研究NSData基于存储技术。

于 2012-08-11T01:27:32.857 回答
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您可以在此答案中找到此类问题的示例(和解决方法)。

于 2013-07-31T19:09:42.013 回答
0

您可以将浮点值存储为 NSNumber。但是 NSNumber 没有正确存储在 UIPasteboard 中,尽管文档声明它确实(错误?)。

要将 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
于 2014-04-22T07:24:34.777 回答