小编Sen*_*ful的帖子

XCode 7中UI测试的文档

我想知道是否有任何关于在WWDC 2015中引入的XCode 7中的新UI测试的文档.如果没有文档,是否有任何用户生产的版本值得关注?

谢谢

user-interface xcode ui-testing xcode-ui-testing

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

在 Swift 的布尔赋值中使用“if-case”格式?

如果我定义了以下枚举:

enum CardRank {
  case number(Int)
  case jack
  case queen
  case king
  case ace
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用 anif-let来检查它是否是一个数字

let cardRank = CardRank.number(5)
if case .number = cardRank {
  // is a number
} else {
  // something else
}
Run Code Online (Sandbox Code Playgroud)

但是,我想将“这是一个数字”的布尔结果分配给一个变量,而不是使用 if 语句。

例如这样的事情:

let isNumber = (case .number = cardRank)
Run Code Online (Sandbox Code Playgroud)

但是,这给了我编译器错误:

error: expected expression in list of expressions
let isNumber = (case .number = cardRank)
                ^
Run Code Online (Sandbox Code Playgroud)

是否有类似的 1 行语法来使这种分配工作?

我得到的最接近的是这个,但它非常混乱:

let isNumber: Bool = { if case …
Run Code Online (Sandbox Code Playgroud)

enums swift

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

为什么简单的实体数据模型关系返回null而不是对象的引用?

我有2个简单的表和SQL Server Express中定义的外键:


产品

  • ProductID [auto-inc]
  • 名称
  • CompanyID [not-null]

公司

  • CompanyID [auto-inc]
  • 名称

FK_Product_Company

  • Product.CompanyID = Company.CompanyID

我创建了一个ADO.NET实体数据模型并将所有表添加到其中..edmx文件显示设计器中的1对多关系.我用数据手动填充数据库,以确保每个产品都有公司.但是,每当我尝试访问产品的公司时,它总是返回null而不是公司的实例.

例如,在C#中运行以下代码,返回null:

var _db = new MyDBEntities();
var product = (from p in _db.Product
               where p.ProductID == 3
               select p).First();
product.Company // == null
Run Code Online (Sandbox Code Playgroud)

我有什么步骤可以让它工作吗?

谢谢


我尝试过的事情:


运行以下SQL,正确返回公司记录.

SELECT Company.*
FROM Product
  LEFT JOIN Company ON (Product.CompanyID = Company.CompanyID)
WHERE Product.ProductID = 3
Run Code Online (Sandbox Code Playgroud)

我要做的下一件事就是调试这个问题,就是运行以下代码:

var _db = new MyDBEntities();
var product = (from p in _db.Product
               where p.ProductID == 3
               select p).First();
var …
Run Code Online (Sandbox Code Playgroud)

.net entity-framework

7
推荐指数
2
解决办法
5843
查看次数

包装[NSString stringWithFormat:]的正确方法是什么?

假设我有一个带签名的方法:

+ (NSString *) myFormattedString:(NSString *)format, ...;
Run Code Online (Sandbox Code Playgroud)

我希望它在我的选择之前添加一个字符串(例如@"Foo:").我想最好的方法是使用[myString initWithFormat:arguments:],但是你如何实现这个方法呢?


我尝试了以下操作,但是我收到了评论中指定的警告:

+ (NSString *) myFormattedString:(NSString *)format, ... {
  char *buffer;
  [format getCString:buffer maxLength:[format length] encoding:NSASCIIStringEncoding];

  va_list args;
  va_start(args, buffer); // WARNING: second parameter of 'va_start' not last named argument

  NSString *str = [[NSString alloc] initWithFormat:format arguments:args];
  [str autorelease];

  return [NSString stringWithFormat:@"Foo: %@.", str];
}
Run Code Online (Sandbox Code Playgroud)

我假设va_start()可以接受(char*)的原因是因为我在STDARG(3)手册页上看到的例子.如果我完全错误的话,请随意完全重写该方法.

objective-c nsstring

7
推荐指数
2
解决办法
7085
查看次数

如何使用iPhone SDK私有API

我还没有找到使用iPhone库中私有API所需步骤的完整列表.

特别是,我想知道如何获取头文件,如果它们甚至是必需的,如何让它编译(当我只是添加头,它抱怨函数没有定义),以及什么资源可以用于了解私有API(例如来自其他用户的体验,例如http://iphonedevwiki.net/,其中有一些).

我在其他地方读过,人们建议使用class-dump来获取标题.有没有替代方法?我注意到有一些 iPhone私有SDK的存储库,你会推荐哪些最新的资源?

以前 关于私有API文档的大多数问题都与Erica Sadun的网站有关,该网站似乎没有文档(左边的所有链接都被删掉).

请保存关于不使用私有API的评论......我知道最大的风险:

  • 应用程序将被Apple拒绝.
  • 应用程序将在未来的操作系统更新中中断.

我说的是合法用途,例如:

  • 私人应用程序的使用(例如,用于单元测试,或者搞乱看看有什么可能)

iphone resources iphone-privateapi

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

结合CSS属性和伪元素选择器?

如何将伪元素selector(:after)与属性selector([title])组合?

我尝试过使用div[title]:after,但这在Chrome中不起作用.

HTML:

<div title="foo">This div has a title.</div>
<div>This div does not have a title.</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

div:after {
    content: "NO";
}
div[title]:after {
    content: "YES";
}
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/jmAX6/

它在每个div的末尾显示"YES",当它在第二个div之后显示"NO"时.

我正在运行Chrome 17.0.963.38.它似乎在Safari 5.1.2中运行良好.

css google-chrome css-selectors pseudo-element

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

为在Objective-C中实现特定协议的类创建类别?

简短的问题描述

我可以使用类别扩展UIView,但是它只适用于实现特定协议(WritableView)的子类吗?

即我可以做以下的事情吗?

@interface UIView<WritableView> (foo) // SYNTAX ERROR
- (void)setTextToDomainOfUrl:(NSString *)text;
- (void)setTextToIntegerValue:(NSInteger)value;
- (void)setCapitalizedText:(NSString *)text;
@end
@implementation UIView<WritableView> (foo)
// implementation of 3 above methods would go here
@end
Run Code Online (Sandbox Code Playgroud)

详细的问题描述

想象一下,我想将以下类别函数添加到任何实例UILabel:

[label setTextToDomainOfUrl:@"http://google.com"];
Run Code Online (Sandbox Code Playgroud)

这只是设置UILabel的text属性google.com.

同样地,我希望能够在其他几个类上调用此函数:

[button setTextToDomainOfUrl:@"http://apple.com"]; // same as: [button setTitle:@"apple.com" forState:UIControlStateNormal];
[textField setTextToDomainOfUrl:@"http://example.com"]; // same as: textField.text = @"example.com"
[tableViewCell setTextToDomainOfUrl:@"http://stackoverflow.com"]; // same as: tableViewCell.textLabel.text = @"stackoverflow.com"
Run Code Online (Sandbox Code Playgroud)

假设到目前为止我对我的设计非常满意,并且我希望为所有4个类增加2个方法:

[label setTextToIntegerValue:5] // same as: label.text = [NSString stringWithFormat:@"%d", 5]; …
Run Code Online (Sandbox Code Playgroud)

objective-c objective-c-category objective-c-protocol

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

当尝试从Xcode控制台打印内容时,"执行被中断,原因:断点"

我暂停了我的应用程序并尝试将某些内容打印到控制台.(例如po foo()).这样做之后,我收到以下消息:

错误:执行被中断,原因:断点2.1.
该进程已在执行前返回到该状态.

但是,该功能没有断点.为什么它会向我显示此错误而不执行该功能?

这是在Xcode 4.6上.

xcode llvm

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

处理UIKeyboardWillShowNotification以便在按下视图控制器时键盘已经启动?

通常,如果您将UITextField设置为第一响应者,viewDidLoad或者viewWillAppear当视图控制器被推入导航堆栈时,您将获得一个动画,其中视图控制器从右侧滑入,键盘已经向上(即没有双动画) :

在此输入图像描述
理想的动画(250毫秒)

但是,当我使用自动布局并根据键盘大小控制视图的布局时,会导致奇怪的动画.在这种情况下,我的按钮有一个约束到superview的底部,我在键盘通知事件中更新其常量属性.

在此输入图像描述
越野车动画(250毫秒)

(注意按钮,占位符和标签在推送期间如何向上动画.还要注意光标如何从占位符文本下方开始并向上浮动直到它到达占位符.)

根本问题似乎是,当通知被触发时,它已经在动画块(动画导航控制器的动画块)中,然后在现有动画块中触发另一个动画块(即,self.view.layoutIfNeeded()以便自动布局更改动画).

当然我可以在viewDidAppear中调用becomeFirstResponder ,但后来我得到了两个动画.我想利用键盘已启动的行为,因此界面看起来更具响应性(理想情况下保持接近250毫秒).

在此输入图像描述
双动画(600毫秒)

我如何处理UIKeyboardWillShowNotification,以便当用户点击UITextField并且在推动视图控制器时使用我上面的理想动画时它将同时工作?


理想解决方案

  • Apple会在通知字典中提供另一个值,例如shouldAnimate,它会告诉您在处理通知时是否应该使用UIAnimation块.例如:在此推送的情况下,它会发送false,但如果用户只是点击文本字段,它将发送true.

Hacky的解决方法:

  • 不要立即在viewDidLoad中设置becomeFirstReponder,而是以任意延迟调用它.这将导致不合需要的双重动画:首先视图控制器将从右侧滑入,然后键盘将出现.(有关此示例,请参阅上面的"双动画"动画.)
  • 推断如果你是在一个动画块通过查看通知的用户信息字典的关键,比如UIKeyboardAnimationDurationUserInfoKey这是0.35一个推动过程,并且0.25当用户点击一个的UITextField.如果定制动画,Apple更改动画等,这很容易破坏.
  • viewWillAppear(preventAnimationBlock = true)和viewDidAppear(preventAnimationBlock = false)中设置一个标志.这似乎是最安全的方法,并产生我想要的精确动画.但是,维持状态是不可取的.

解决方案不起作用:

  • viewDidLoad中的布局.以现在的眼光最后还是没负载,通话setNeedsLayoutlayoutIfNeeded,而该解决方案在过去的工作,它不与上面的按钮例子工作.这将导致标签和文本视图无法正确设置动画,但该按钮仍将无法正确显示动画.
  • 尝试检查你是否已经处于动画块中:如果有办法知道我是否已经在动画块中,它可以解决我的问题; layoutIfNeeded在那种情况下我根本不会打电话.我尝试使用其中一种方法来解决这个问题,但没有一种方法可行.可能是因为这是Apple在内部使用的某种隐藏/魔术动画块.
  • 尝试查看视图是否在屏幕上:使用此视图的想法是视图将在屏幕外报告,因为尚未调用viewDidAppear,因此我不会将代码包装在动画块中.但是,当您尝试 …

keyboard cocoa-touch nsnotificationcenter ios autolayout

7
推荐指数
0
解决办法
747
查看次数

现在将从Swift 3中删除C-Style for循环,这是一种不执行循环的简洁方法?

想象一下,我们有这个完美适用的代码n >= 0.

func fibonacci(n: Int) -> Int {
    var memo = [0,1]
    for var i = 2; i <= n; i++ {
        memo.append(memo[i-1] + memo[i-2])
    }
    return memo[n]
}
Run Code Online (Sandbox Code Playgroud)

如果由于即将发生的Swift 3.0更改而删除了C-style for循环,我会得到这样的结果:

func fibonacci(n: Int) -> Int {
    var memo = [0,1]
    for i in 2...n {
        memo.append(memo[i-1] + memo[i-2])
    }
    return memo[n]
}
Run Code Online (Sandbox Code Playgroud)

虽然这可以正常工作n >= 2,但数字失败01出现此错误消息:

致命错误:无法使用end <start形成Range

什么是为了解决这个问题,才能正常运作为最简洁的方式01

(注意:负数使应用程序崩溃是可以的,甚至是可取的.)


注意:我意识到我可以添加一个警卫声明:

guard n …

for-loop range swift

7
推荐指数
2
解决办法
304
查看次数