小编Tho*_*yer的帖子

"NSString stringWithFormat:" - 多次访问相同的参数?

当我使用字符串格式时,我可以多次访问一个参数而不再传递它吗?

例:

NSString *parameter1 = @"1";
NSString *parameter2 = @"2";

NSString *myString;
myString = [NSString stringWithFormat:@"I want to print parameter1 here: %@, parameter2 here: %@ and now access parameter1 again: %@ _without_ passing it again.",parameter1, parameter2, parameter1];
Run Code Online (Sandbox Code Playgroud)

有没有办法再次访问第一个参数而不再写",parameter1"?

objective-c string-formatting nsstring

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

如何优雅地比较Swift中的元组?

我有2个不同类型的元组(Double,Double):

let tuple1: (Double, Double) = (1, 2)
let tuple2: (Double, Double) = (3, 4)
Run Code Online (Sandbox Code Playgroud)

我想使用简单的if语句比较它们​​的值.就像是:

if (tuple1 == tuple2) {
    // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

找不到接受提供的参数的'=='的重载

我目前的解决方案是这样的功能:

func compareTuples <T: Equatable> (tuple1: (T, T), tuple2: (T, T)) -> Bool {
    return (tuple1.0 == tuple2.0) && (tuple1.1 == tuple2.1)
}
Run Code Online (Sandbox Code Playgroud)

我真的不喜欢这个解决方案,并寻找更优雅的东西.我已经尝试编写扩展但不能使其适用于元组.你有解决这个问题的好方法吗?

comparison tuples swift

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

"绘制图像没有意义" - 升级到MountainLion后发出警告

在我将编程机器升级到MountainLion和XCode到新版本后,每次运行我的应用程序时都会将此警告打印到控制台中:

当[NSGraphicsContext currentContext]为nil时绘制图像没有意义.这是一个编程错误.打破void _NSWarnForDrawingImageWithNoCurrentContext()进行调试.这将只记录一次.这可能在将来破裂.

我没有在我的应用程序中的任何地方使用图像,我搜索整个项目的图像但找不到.有人知道是什么原因引起的吗?

我正在使用2个nib文件btw:一个Popover和Mainwindow.它们都不包含图像.

编辑:我在找到时找到了该行:

    [self.popover showRelativeToRect:[appDelegate.menulet frame] 
                              ofView:appDelegate.menulet 
                       preferredEdge:NSMinYEdge];
Run Code Online (Sandbox Code Playgroud)

但这些对象都不是零.有什么建议?

编辑2:Menulet是一个NSView子类btw.所以我传递了一个观点.

warnings osx-mountain-lion

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

自SDK更新以来,NSButton没有显示替代标题?

背景资料:

我最近从Lion升级到MountainLion和最新的xCode.我正在开发的应用程序具有部署目标10.7.

问题:

NSButton在Interfacebuilder中设置了Title:"Start"Alternate:"Stop".在按钮中,IBAction我检查应用程序的状态(BOOL isRunning)并在每次按下按钮时更改状态,如下所示:

[startStopButton setState:[appDelegate.dataController appIsRunning]];
Run Code Online (Sandbox Code Playgroud)

一切都很好.自从我升级到新的xCode后,该按钮不再更改标题.

我已经尝试过的事情:

  • 根据此按钮检查IBAction和IBOutlet之间的所有连接.重置一切.没有帮助.
  • 尝试创建了一个新的NSButton.不工作.
  • 通过代码设置标题:没有用.

    [startStopButton setTitle:@"Start"];
    [startStopButton setAlternateTitle:@"Stop"];
    
    Run Code Online (Sandbox Code Playgroud)
  • 认为它可能是布尔值的问题.所以我检查了按钮是否处于混合模式.然后硬编码状态与int类型中的1和0交换.完全没有变化.

  • 不知何故,当我使用[startStopButton setTitle:@"TEST"]然后更改状态时,它会将状态ONCE更改为交替但不再返回.按钮上从未看到"TEST"字符串...

  • 我记录了值,[appDelegate.dataController appIsRunning]它返回正确的值.

我不知道如何解决这个问题.一切都很好,我什么都没改变,这对我没有任何意义.有没有人遇到过同样的问题?

macos nsbutton xcode4.5

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

InApp-Purchase有两种不同的价格

我在iTunesConnect中有几个InApp-Purchases,我确实通过我的应用程序接收了他们的数据.收到所有数据,一切似乎都正常.价格介于第1层和第3层之间.一切似乎都很好.(见截图#1)

但是当我想购买这些产品时,我总会得到不同的(更高)价格.(见截图#2)

难道我做错了什么?这与欧洲目前的税收增长有关吗?我用来在我的按钮上打印价格的代码:

NSNumberFormatter *priceFormatter = [[NSNumberFormatter alloc] init];
[priceFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
for (SKProduct *p in _products) {
    [priceFormatter setLocale:p.priceLocale];
    NSString *title = [NSString stringWithFormat:@"%@ %@",p.localizedTitle,[priceFormatter stringFromNumber:p.price]];
}
Run Code Online (Sandbox Code Playgroud)

但价格不会增加一定比例(这与税收理念相矛盾):

第1层 - 0,99€ - > 1,56€

第2层 - 1,99€ - > 2,34€

第3层 - 2,99€ - > 3,12€

编辑#1:显然价格会随机变化.我还录制了现象的视频.您可以看到价格是从AppStore开始加载的.这确实发生在模拟器和设备上.AppStore帐户是两者上的沙箱帐户.

编辑#2:我还检查了更高值的定价矩阵.它们不出现在整个矩阵中.所以我想这不是Sandbox向我发送错误的欧盟国家的价值.

编辑#3:我为美国Appstore创建了一个新的沙盒用户.现在价格似乎不断正确(尝试了~15次).这告诉我们什么?是欧洲沙箱车还是欧洲的客户会看到错误的价格吗?

商店的屏幕截图正确的价格 价格错误的对话框的屏幕截图

itunesconnect in-app-purchase ios

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

发布私有git存储库的某些路径

我在一个包含以下项目的私有gitlab存储库中与一个约10个开发团队合作:

  1. 服务器
  2. AI
  3. 客户
  4. 接口
  5. 杂项(协议,PR材料等)

除了Misc之外,其中每个都有自己的Maven依赖项和单元测试包含在它们的特定文件夹中.

我们正在使用git-flow,因此所有分支将develop在某个时刻与一个分支合并.


题:

我们目前只销售带有源的客户端和接口,并且希望允许我们的客户只访问这些(子)项目,包括他们的历史,同时能够轻松推送更新并使用gitlab的issues功能.

我的想法:

  1. 如果它是一个公共回购,我会简单地使用git submodules,但这个解决方案似乎与私有存储库完美无缺.(如果有的话 - 已经阅读了很多关于无效路径的问题)
  2. 如果我有超洁净分支机构ClientInterface,我可以添加其他新的remote存储库,只需按下这两个分支它.这个解决方案的问题在于,我们没有经验丰富的开发人员和一个肮脏的推动或从develop分支机构的一次推动基本上会使整个想法变得毫无用处.风险太高了.
  3. 另一个想法我已经在动这2个子项目进行私人回购,创建子模块的私人回购协议.这在某种程度上也感觉非常不方便,因为我们continuous integration会在不同的回购中运行,并且我们自己的问题也会在那里进行跟踪.

由于这是一个非常具体的设置和计划,我会对你的想法感兴趣,以解决这样的情况.谢谢你的时间.

git gitlab

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

如何在Java中舍入大于long类型最大值的数字?

我要处理非常大的双值,我必须将它们舍入到下一个完整数字.如果我舍入双值,我总是会收到值9.223372036854776E18,它恰好是最大长值.如何舍入大于此值的值?

编辑:只是为了澄清:我不是Java程序员,来自C前端.我在这个案子上帮朋友.我尝试了unsigned(显然没有用),谷歌搜索并找到了BigDecimal和BigInteger.尝试投掷他们,它碰巧崩溃.这就是我来到这里的原因.谢谢你的帮助!

java rounding type-conversion

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

我可以在对象的属性上使用[NSArray containsObject:]函数吗?

背景资料:

我编写了一个包含2个图库的iOS应用程序:本地图库和服务器库.当用户更新服务器库并将其合并到本地服务器库时,应用程序应该只下载新图像.

为了最大限度地减少内存消耗,我保存了图像并使用ImageEntity具有以下属性的类的实例填充数组:fileName,filePathvotingStatus.

我尝试使用以下逻辑来检查图像是否已存在:

for (ImageEntity *imageEntity in self.serverImagesArray) {
  if (![self.localImagesArray containsObject:imageEntity]){
    [self.localImagesArray  addObject:imageEntity];
  }
}
Run Code Online (Sandbox Code Playgroud)

但是因为每个实体都是一个单独的对象,所以它总是被添加.但是每个实体都有一个唯一的fileName.


问题: 我可以以某种方式扩展[NSArray containsObject:]函数以检查数组中的一个对象是否具有等于"someValue"的属性?(当我将Cocoa-Bindings与ArrayController结合使用时,我可以分配数组元素的属性 - 我想访问与此类似的属性).


我知道我可以使用比较本地数组的每个实体与服务器阵列上的每个元素.我不得不进行O(n ^ 2)比较,画廊可能包含数百张图像.

奖金问题:我是否已经在没有意识到的情况下这样做了?有没有人有关于Apple实现此功能的详细信息?是否有一些奇特的实现,或者他们只是在比较每个元素的数组上进行迭代?

comparison performance xcode nsarray

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

在开发iOs/OsX应用程序时使用Objective C的优雅方法?

我已经开发了几个月的iOs和OsX应用程序,现在仍然觉得我做错了.我尝试坚持使用指南,并尝试尽可能多地使用Apple提供的对象.但似乎他们让我的代码很难理解.

例:

当我想"增加"一个NSNumber对象(这是不可变的,但你得到我的意思),我使用这样的尴尬行:

int value = [counter intValue];
counter = [NSNumber numberWithInt:value +1];
Run Code Online (Sandbox Code Playgroud)

这真的有必要吗?是否有更优雅的方式(i ++,inc(i)等)做这样简单的事情?特别是当您使用坐标时,它会变得非常令人沮丧且难以使用.

使用Objective CI时,我觉得我一直在分配,解除分配和转换对象,并浪费了我自己的时间和所有转换的CPU时间.感谢您的时间,我非常感谢您的回答,我很期待您的回复!

cocoa objective-c ios

0
推荐指数
1
解决办法
209
查看次数

使用pop创建无尽的动画?

使用Coreanimation框架时,我可以设置动画重复.我想设置一个"吸引注意"模式的按钮,这将使他成长和缩小一小部分以引起用户的注意.

我已经通过完成块链接了增长和缩小动画.问题是我是否以及如何从第二个动画的完成块开始第一个动画.

我确实收到了以下有意义的警告.这个问题的优雅解决方案是什么?我不喜欢为这样的东西创造计时器.

在此块中强烈捕获'scaleAnimation'可能会导致保留周期

- (void)attractAttention:(BOOL)flag{
    _attractAttention = flag;
    float resizeValue = 1.2f;

        // Grow animation
    POPSpringAnimation *scaleAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
    scaleAnimation.fromValue  = [NSValue valueWithCGSize:CGSizeMake(1.0f, 1.0f)];
    scaleAnimation.toValue  = [NSValue valueWithCGSize:CGSizeMake(resizeValue, resizeValue)];
    scaleAnimation.completionBlock = ^(POPAnimation *anim, BOOL finished) {
            // Grow animation done
        POPSpringAnimation *scaleAnimationDown = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
        scaleAnimationDown.fromValue  = [NSValue valueWithCGSize:CGSizeMake(resizeValue, resizeValue)];
        scaleAnimationDown.toValue  = [NSValue valueWithCGSize:CGSizeMake(1.0f, 1.0f)];

        scaleAnimationDown.completionBlock = ^(POPAnimation *anim, BOOL finished) {
                // Shrink animation done
            if (_attractAttention) {
                [self.layer pop_addAnimation:scaleAnimation forKey:@"scaleUpAnimation"];
            }
        };

        [self.layer pop_addAnimation:scaleAnimationDown forKey:@"scaleDownAnimation"];
    }; …
Run Code Online (Sandbox Code Playgroud)

animation ios facebook-pop

0
推荐指数
1
解决办法
2618
查看次数