小编Gab*_*lla的帖子

程序演变和破碎测试

维持单元测试很困难.我确信我们都经历过一个时刻,对被测系统的看似微小的变化导致数十个单元测试失败.有时这些故障揭示了SUT中的错误,但通常测试已经过时,不再反映SUT的正确行为.在这些情况下,有必要修复损坏的测试.

你遇到过这种情况吗?经常发生吗?你介绍了什么变化以及失败是如何表现出来的?你修复了破损的测试或者只是删除了它们吗?如果是前者,怎么样?如果是后者,为什么?对失败的恐惧如何影响您编写测试的愿望?

我还想找到破损测试的具体例子.您是否知道任何以导致测试失败的方式发展的开源应用程序?

testing unit-testing

11
推荐指数
3
解决办法
655
查看次数

Objective-C中的静态块变量

是否可以使用"块类型"的静态变量?

我有一个只在静态方法中做的东西.执行那些我打电话的方法statusChangedBlock.为此,我创建了一个类的共享实例,并使用其单个块属性.我想知道是否有可能有一个静态块变量; 所以我不必创建一个具有单个属性的实例,只是为了通知我的状态已更改.

我知道有一个NSNotification的选项,但我不喜欢使用它,但有一些罕见的例外.

......这个问题听起来有些愚蠢,我不知道为什么.我希望有人指出这一点.

objective-c static-variables objective-c-blocks

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

Git checkout删除gitignore中的文件

我不小心在git仓库中跟踪了工作区配置文件.试图解决问题,我将git rm --cached这些文件添加到.gitignore文件中.

现在,每当我从回购中签出一个分支时,这些都会被删除.有什么方法可以避免这种情况吗?

git

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

为什么ARC将此块复制到堆中?

考虑这个简单的例子

int i = 42;
int (^aBlock)() = ^ {
    return i;
};
NSLog(@"Class: %@", [aBlock class]);
Run Code Online (Sandbox Code Playgroud)

没有ARC,上面的代码打印出来

Class: __NSStackBlock__
Run Code Online (Sandbox Code Playgroud)

而与ARC一起打印

Class: __NSMallocBlock__
Run Code Online (Sandbox Code Playgroud)

我放置了一个符号断点,_Block_copy看起来ARC正在插入一个Block_Copy()调用,导致该块被移动到堆中

这似乎是一种不必要的开销,它首先打破了堆栈上的块的整个目的.

这是ARC的限制还是设计选择?

objective-c objective-c-blocks automatic-ref-counting

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

AFNetworking多个文件上传

我想将一些图像上传到服务器,所以我使用AFNetWork发布文件.代码在这里:

UIImage *image1 = [UIImage imageNamed:@"about_app"];
UIImage *image2 = [UIImage imageNamed:@"alter"];
NSArray *array = @[image1,image2];
__block int i = 0;
NSMutableURLRequest *request = [[AFNetWorkSingleton shareInstance] multipartFormRequestWithMethod:@"POST" path:@"Mindex/getimg" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>formData){
for(UIImage *eachImage in array)
{
    NSData *imageData = UIImageJPEGRepresentation(eachImage,0.5);
    [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%d",i ] fileName:[NSString stringWithFormat:@"abc%d.jpg",i ] mimeType:@"image/jpeg"];
    i++;
}
}];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){.....}
Run Code Online (Sandbox Code Playgroud)

这不行!但是当我使用下面的代码替换multipartFormRequestWithMethod方法中的"for"语句时,一切都正常了!但如果我无法确认图像数组的数量,我必须使用"for"语句,我的代码有问题吗?

 [formData appendPartWithFileData:UIImageJPEGRepresentation([array objectAtIndex:0], 0.5) name:@"image1" fileName:@"image1.jpg" mimeType:@"image/jpeg"];
 [formData appendPartWithFileData:UIImageJPEGRepresentation([array objectAtIndex:1], 0.5) name:@"image2" fileName:@"image2.jpg" mimeType:@"image/jpeg"];
Run Code Online (Sandbox Code Playgroud)

ios afnetworking

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

如何交换`NSMutableDictionary`键和值?

我有一个NSMutableDictionary,我想交换值和键.即,交换后的值变为键,其对应的键变为值所有键和值都是唯一的.寻找一个适当的解决方案,因为尺寸非常大.此外,键和值是NSString对象

iphone nsmutabledictionary ios

9
推荐指数
2
解决办法
3006
查看次数

自动将日期/时间和内部版本号添加到Info.plist Xcode

我希望自动将构建日期和内部版本号添加到我的Info.plist文件中,仅用于存档iOS应用程序的构建.

我的脚本如下

#!/bin/bash
# This was taken from variations from:
# http://davedelong.com/blog/2009/04/15/incrementing-build-numbers-xcode

if [ "$CONFIGURATION" != "Release" ]
then
exit
fi


buildPlist="$SRCROOT/$PROJECT_NAME/$PROJECT_NAME-Info.plist"


# Get the existing buildVersion and buildNumber values from the buildPlist
buildVersion=$(/usr/libexec/PlistBuddy -c "Print CFBuildVersion" "$buildPlist")

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBuildNumber" "$buildPlist")

buildDate=$(date "+%s")


# Increment the buildNumber
buildNumber=$(($buildNumber + 1))

# Set the version numbers in the buildPlist
/usr/libexec/PlistBuddy -c "Set :CFBuildNumber $buildNumber" "$buildPlist"
/usr/libexec/PlistBuddy -c  "Set :CFBuildDate $buildDate" "$buildPlist"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildVersion.$buildNumber" "$buildPlist"
/usr/libexec/PlistBuddy -c …
Run Code Online (Sandbox Code Playgroud)

bash xcode

8
推荐指数
2
解决办法
3287
查看次数

UICollectionViewCell填充

我试图在集合视图单元格上设置零填充,我在视图控制器上设置了"Min Spacing":

在此输入图像描述

然而,细胞之间仍然存在差距:

在此输入图像描述

我也喜欢它,以便细胞根据框架的宽度很好地包裹,例如每个单元格宽50px,所以如果有六个单元格并且我将框架宽度设置为150px,它将显示两行三细胞.

然而,如果我通过执行以下操作将帧宽度设置为150:

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect frame = self.collectionView.frame;
    frame.size.width = 150;
    self.collectionView.frame = frame;
}
Run Code Online (Sandbox Code Playgroud)

它看起来像在上面的屏幕截图(太宽).

如果我把它设置为像10这样可笑的小东西,它会在某种程度上包裹起来:

在此输入图像描述

UICollectionViewCell设置为50 x 50:

在此输入图像描述

我还尝试以编程方式设置单元格的大小,还删除了UIEdgeInset:

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    return UIEdgeInsetsMake(0, 0, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)

我已禁用自动布局,只是有任何干扰.关于如何移除衬垫并根据框架宽度/高度进行包装的任何建议?

objective-c uicollectionview uicollectionviewcell

8
推荐指数
1
解决办法
2万
查看次数

在无形2.0中动态创建可扩展记录

我需要HList根据键和值映射生成可扩展记录,这里是我想要实现的MWE(你可以在任何REPL中复制/粘贴这个可用的无形2.0,以便重现问题)

import shapeless._; import syntax.singleton._; import record._

case class Foo[T](column: Symbol)

val cols = Foo[String]('column1) :: HNil

val values = Map("column1" -> "value1")

object toRecord extends Poly1 {
  implicit def Foo[T] = at[Foo[T]] { foo =>
    val k = foo.column.name
    val v = values.get(k)
    (k ->> v)
  }
}

val r = cols.map(toRecord)
// r: shapeless.::[Option[String] with shapeless.record.KeyTag[k.type,Option[String]] forSome { val k: String },shapeless.HNil] = Some(value1) :: HNil

val value = r("column1")
// error: No field String("column1") in …
Run Code Online (Sandbox Code Playgroud)

scala shapeless

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

传递一个类型参数以用作参数LabelledGeneric

我想参数化,需要在通用型工作的方法A为其中LabelledGeneric可以检索.这是天真的方法

case class Foo(bar: String, baz: Boolean)

def params[A](a: A) = {
  val lbl = LabelledGeneric[A]
  val keys = Keys[lbl.Repr].apply
  ...
}

val myThingy = params(Foo)
Run Code Online (Sandbox Code Playgroud)

当然,潜在的宏抱怨.它不够了解A:

类型A不是类或特征


所以,我试着LabelledGeneric推断

def params[A](a: A)(implicit lbl: LabelledGeneric[A]) = {
  val keys = Keys[lbl.Repr].apply
  ...
}
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但Repr不再知道这种类型HList

类型参数[lbl.Repr]不符合方法apply的类型参数bounds [L <:shapeless.HList]


好吧,让我们试着更精确

def params[A, Repr <: HList](a: A)(implicit lbl: LabelledGeneric.Aux[A, Repr]) = {
  val keys = Keys[lbl.Repr].apply
  ...
}
Run Code Online (Sandbox Code Playgroud)

现在,Repr绝对是一个HList …

scala shapeless labelled-generic

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