问题列表 - 第42119页

我应该如何在从UISliders读取的Core Data中存储百分比值?

滑块是我的应用程序的主要用户交互元素(如图...).我用它们来记录百分比值,然后将其作为Readings 存储在我的Core Data存储中.根据百分比值的性质,我将它们存储为0到1之间的十进制值,并将滑块设置为0到1的范围,并连续触发它们的值更改操作.当我需要显示它们时,我从数据存储中获取它们并将它们显示为典型的百分比值,例如67%.

现在这里是捕获:类型的value属性.这意味着我将从一开始就遇到舍入错误.我对准确性很坚定,所以当我在整个应用程序中处理它们时,我希望尽可能地减少误差范围.UISliderfloat

有哪些选项可用于管理我从滑块读取的百分比值,存储在Core Data中并显示在我的应用程序的其余部分?或者更好的是,在代码可维护性,内存使用/性能获得的值的准确性方面,我提出的哪些选项最适合我的应用程序?

  1. 使用原始浮动或双打

    实际上这很糟糕,显然是因为舍入错误.甚至0.64在某个时间点变为0.63(我已经用我的滑块进行了测试,这些都出现了很多).差异可能大到0.01,我的应用程序绝对不能容忍这一点.为什么我甚至会把它作为一个选项呢?

  2. 将滑块范围设置为0到100之间,读取它们,向上/向下舍入并存储为整数

    这是一个有趣的选择,因为我只会显示##%和不显示值0.##.我也不需要对这些值执行算术,所以这样做看起来没问题:

    // Recording and storing
    // Slider range is 0 to 100
    int percentage = (int) floor(slider.value);             // Or ceil()
    [reading setValue:[NSNumber numberWithInt:percentage]]; // Value is an integer
    
    // Displaying
    NSNumber *val = reading.value;
    [readingLabel setText:[NSString stringWithFormat:@"%d%%", [val intValue]]];
    
    Run Code Online (Sandbox Code Playgroud)

    当我第一次从滑块上读出它们时,它不会完全消除舍入错误(它们仍然float是s!),但是floor()或者ceil()应该将它切掉,我想.我不完全确定; 也许这里有人可以提供更多的见解,这就是我提出这个问题的重点.

  3. 转换为NSDecimalNumber …

iphone floating-point core-data objective-c ios

4
推荐指数
1
解决办法
1187
查看次数

从CSV中删除空白行?

我有一个大的csv文件,其中一些行是完全空白的.如何使用Python删除csv中的所有空行?

在你提出所有建议后,这就是我到目前为止所做的

import csv

# open input csv for reading
inputCSV = open(r'C:\input.csv', 'rb')

# create output csv for writing
outputCSV = open(r'C:\OUTPUT.csv', 'wb')

# prepare output csv for appending
appendCSV = open(r'C:\OUTPUT.csv', 'ab')

# create reader object
cr = csv.reader(inputCSV, dialect = 'excel')

# create writer object
cw = csv.writer(outputCSV, dialect = 'excel')

# create writer object for append
ca = csv.writer(appendCSV, dialect = 'excel')

# add pre-defined fields
cw.writerow(['FIELD1_','FIELD2_','FIELD3_','FIELD4_'])

# delete existing field names in input CSV
# …
Run Code Online (Sandbox Code Playgroud)

python csv delete-row

17
推荐指数
4
解决办法
5万
查看次数

如何在Sinatra中创建不区分大小写的路由?

我正在玩Sinatra,我想让我的一条路线不区分大小写.我尝试添加这样的路线:

get "(?i)/tileflood/?" do
end
Run Code Online (Sandbox Code Playgroud)

但它与预期的/ tileflood的任何排列都不匹配.我在rubular.com上测试了以下正则表达式,它匹配得很好.我错过了什么吗?

\/(?i)tileflood\/?
Run Code Online (Sandbox Code Playgroud)

sinatra

7
推荐指数
1
解决办法
994
查看次数

在Racket中创建一个空列表

我正在教自己LISP的在线文本计算机程序的结构和解释,但它与我正在运行的学习LISP的Racket程序的细节不同.例如,SICP表示任何列表的终止元素都是'nil',但是Racket不支持'nil'.如何在Racket中创建一个空列表,以便我可以测试自己的程序?

null list racket

5
推荐指数
3
解决办法
9805
查看次数

Sitecore工作流程和管道

我正在尝试在工作流程命令上实现一个基本的Javascript确认框(例如"你确定要编辑它吗?").根据用户是单击是还是否,我想转到工作流程中的其他状态.这是我目前的代码(取出一些逻辑):

[Serializable]
public class ConfirmAction
{
    public void Process(WorkflowPipelineArgs args)
    {
        Item currentItem = args.DataItem;
        ClientPipelineArgs clientArgs = new ClientPipelineArgs();
        Sitecore.Context.ClientPage.Start(this, "DialogProcessor", clientArgs);
    }

    protected void DialogProcessor(ClientPipelineArgs args)
    {
        if (args.IsPostBack)
        {
            if (args.Result != "yes")
            {
                args.AbortPipeline();
                return;
            }
        }

        else
        {
            Sitecore.Context.ClientPage.ClientResponse.Confirm("Are you sure you want to edit this?");
            args.WaitForPostBack();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我是Pipeline模型的新手,特别是与Sitecore有关,所以我有点掌握稻草.我相信,我遇到的问题是,我没有办法将结果从ClientResponse管道返回到工作流管道,告诉它该做什么.

谢谢.

编辑:

使用Yan的信息,我最终想出了以下解决方案:

public void Process(WorkflowPipelineArgs args)
{
    Item currentItem = args.DataItem;
    ClientPipelineArgs clientArgs = new ClientPipelineArgs();
    clientArgs.Parameters.Add("itemID", currentItem.ID.ToString());
    clientArgs.Parameters.Add("stateID", currentItem.Fields["__Workflow state"].Value);
    Sitecore.Context.ClientPage.Start(this, "DialogProcessor", …
Run Code Online (Sandbox Code Playgroud)

pipeline sitecore

5
推荐指数
1
解决办法
3672
查看次数

在REST中处理添加/删除多对多关系的正确方法是什么?

假设我们有一个包含服务器上用户列表的实体,我们希望将其公开为rest.这样做的正确方法是什么?

我的第一个猜测是这样的:

/entity/1/user/5
Run Code Online (Sandbox Code Playgroud)

我们可以使用PUT进行更新,使用DELETE进行删除吗?

这是正确的吗?我去维基百科谈论休息,他们对它的看法是一切都只有1级深.那么也许他们希望你使用PUT/POST并提供整个JSON图并一次更新所有内容?

rest many-to-many web-services http

14
推荐指数
1
解决办法
2067
查看次数

Ant javac返回消息"A.java添加为A.class不存在"

我正在编写一个非常奇怪的ANT任务.我尝试了各种谷歌搜索没有明确的答案.

我在ANT中有一个调用javac命令的编译目标:

<target name="compile">
    <mkdir dir="${classes.dir}" />
    <javac srcdir="${src.dir}:${unittest.src.dir}" destdir="${classes.dir}">
        <classpath refid="classpath" />
        <exclude name="**/plugins/**" />
        <exclude name="**/outbound/**" />
    </javac>
</target>
Run Code Online (Sandbox Code Playgroud)

这不会产生任何错误,但是当我使用-verbose和-debug标记运行ant时,我在日志中得到以下内容:

[javac] package/MyClass.java added as package/MyClass.class doesn't exist
Run Code Online (Sandbox Code Playgroud)

所以这不是错误的,但它给了我这个奇怪的结果(最后附加了"不存在").显然这会导致后来的目标在尝试运行类时失败(在本例中,我的junit目标).

Web搜索似乎表明我要么丢失了一个java_home env变量,要么就是在某个地方存在版本问题(当javac上的source属性设置时,这个错误往往会发生,但我删除了它,但仍然得到了奇怪的结果).我相信我们已经涵盖了这些可能性.

对此的任何想法或建议都会很精彩.谢谢.

java ant

5
推荐指数
1
解决办法
2457
查看次数

存储软件保护目的的保护试用信息的位置

它可能与其他问题重复,但我发誓我搜索了很多并在StackOverflow.com上搜索了很多,我找不到我的问题的答案:

在C#.Net应用程序中,存储保护试用信息的位置,例如到期日期,使用次数?

据我所知,各种软件保护策略都可以被一个狡猾的黑客破解(因为他们几乎总能绕过到期检查步骤).但我现在要做的只是以合理的方式保护它,使"普通"/"高级"用户无法搞砸.

好的,为了证明我在StackOverflow.com上搜索了很多搜索,我列出了我得到的所有策略:

1.注册表项

首先,一些用户可能无法访问甚至读取Registry表.

其次,如果我们将保护试用信息放在注册表项中,则用户可以通过比较软件安装之前和之后的差异来始终找到它.他们可以简单地改变它.

好的,您可能会说我们应该加密保护试用信息,是的,我们可以做到这一点.但是如果用户在安装之前只更改了系统日期呢?

好吧,你可能会说我们也应该把最后使用的日期,如果出现问题,最后使用的日期可以作为保护指南.但是,如果用户只是卸载软件并删除与该软件相关的所有注册表项,然后重新安装软件,该怎么办?

我不知道如何处理这个问题.请帮忙.

普通文件

首先,有一些地方放普通文件:

  • 2.a)软件安装路径下的简单XML文件
  • 2.b)配置文件

同样,用户可以卸载软件并删除这些普通文件,然后重新安装软件.

- 软件本身

如果我们将保护试用信息(到期日期,我们不能将使用次数)放在软件本身中,它仍然容易受到我上面提到的情况的影响.此外,这样做甚至都不酷.

- 试用产品密钥

它的工作方式类似于许可过程,也就是说,我们将试用信息放入RSA签名的字符串中.但是,要求用户尝试使用该软件需要太多步骤(他们可能会失去耐心):

  • 4.a)用户下载软件;
  • 4.b)用户通过提供用户名(或电子邮件)或硬件信息发送电子邮件以请求试用产品密钥;
  • 4.c)服务器接收请求,RSA签名并发回给用户;
  • 4.d)用户现在可以在(到期日期和使用次数)条件下使用它.

现在,服务器记录了用户的用户名或硬件信息,因此用户将被拒绝请求第二次审判.收集硬件信息是否合法?

总之,用户必须再做一个额外的步骤(请求试用产品密钥)只是为了尝试使用该软件,这并不酷(将自己视为用户).

注意:此问题与许可无关,而是与存储试用信息的位置有关.试用期结束后,用户应该要求许可证(CD-Key/Product-Key).我将使用RSA签名(绑定到用户硬件)

PS:我的软件将针对中国市场,其软件市场与美国不同.在中国大多数人,他们只购买硬件,他们通常不会购买Micosoft Windows/Office等软件(他们只使用盗版).但是,一些针对特定领域的专业软件,研究人员仍然愿意购买它,如果没有破解版本或破解版本很难安装.

c# protection store trial

16
推荐指数
1
解决办法
4636
查看次数

检查是当前活动窗口桌面还是否

我尝试检查当前活动窗口是否是桌面做了什么,我在下面的代码中写了一个计时器,但GetDektopWindow和GetForegroundWindow返回的句柄值不是同一个值:

  if GetForegroundWindow = GetDesktopWindow then
    // Do something
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

delphi winapi

3
推荐指数
1
解决办法
3039
查看次数

防止WPF控件扩展到可查看区域之外

我的ItemsControl用户控件中有一个滚动浏览器,当它变得太大时(太大的内容大于可视区域UserControl).问题是它所有的网格都在不断扩展,以便滚动查看器永远不会启动(除非我为网格指定了精确的高度).请参阅下面的代码,并提前感谢.

 <UserControl  x:Class="BusinessObjectCreationWizard.View.TableSelectionPageView"
               xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <GroupBox FontWeight="Bold" Height="300px"
              Header="Tables"
              Padding="2">

        <ScrollViewer>

            <ItemsControl FontWeight="Normal" 
                          ItemsSource="{Binding Path=AvailableTables}">
                <ItemsControl.ItemTemplate>

                    <DataTemplate>              
                        <CheckBox Content="{Binding Path=DisplayName}"
                                  IsChecked="{Binding Path=IsSelected}"
                                  Margin="2,3.5" /> 
                    </DataTemplate> 
                </ItemsControl.ItemTemplate> 
            </ItemsControl>
        </ScrollViewer>
    </GroupBox>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

此处加载此用户控件

<Border Background="White" Grid.Column="1" Grid.Row="0">
        <HeaderedContentControl Content="{Binding Path=CurrentPage}" 
                                Header="{Binding Path=CurrentPage.DisplayName}" />
</Border>
Run Code Online (Sandbox Code Playgroud)

我想不指定高度.

wpf xaml

23
推荐指数
2
解决办法
3万
查看次数