小编Sno*_*man的帖子

为什么添加"动态"可以修复我的错误访问问题?

我有一个与iOS 8 Beta 5一起出现的奇怪问题(此问题在以前的版本中没有出现).

我试图创建一个空项目并尝试复制该问题,但我无法这样做,所以我不太确定问题出在哪里.

我所看到的是,尝试访问自定义NSManagedObject子类的方法会导致奇怪的EXC_BAD_ACCESS错误.

例如:

  var titleWithComma: String {
       return "\(self.title),"
  }
Run Code Online (Sandbox Code Playgroud)

此方法在许多其他方法中,在调用时会导致此问题.但是,dynamic在它之前添加关键字会使问题消失:

  dynamic var titleWithComma: String {
       return "\(self.title),"
  }
Run Code Online (Sandbox Code Playgroud)

我知道我没有提供足够的信息,因为我老实说不知道如何查明实际问题,但任何人都可以解释可能发生的事情,以及为什么添加dynamic可以解决这个问题?

swift

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

只有一个节点的树的高度

根据维基百科,

树的高度是树中从根到最深节点的路径长度.只有一个节点(根)的(根)树的高度为零(或一).

我不明白 - 它是零还是一个(或两者)?

tree height binary-tree discrete-mathematics

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

列表中的项目的Python索引没有错误?

可能重复:
Python list.index问题

要查找列表中项目的索引,请使用:

list.index(x)
Return the index in the list of the first item whose value is x. 
It is an error if there is no such item.
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎有点奇怪,如果找不到该项目会引发错误.我来自(Objective-C land),它返回一个NSNotFound枚举(它只是一个max int,表示找不到该项).

所以我做了一些丑陋的事情来解决这个问题:

index = 0
for item in self.items:
   if item.id == desired_id:
        return index
    index = index + 1
 return -1
Run Code Online (Sandbox Code Playgroud)

我用-1来表示找不到该项目.有什么更好的方法可以做到这一点,为什么Python没有内置这样的东西?

python

24
推荐指数
3
解决办法
4万
查看次数

更改UITextView的字体颜色

我有一个UITextView,用户可以在其中输入文本.假设用户已输入值.如何通过单击按钮将已键入的文本和将来键入的文本的字体颜色更改为其他文本?

我已经设置了我可以更改文本颜色的位置,但只有在我开始输入之前选择颜色时它才有效.在我开始输入并尝试更改颜色后,它不会执行任何操作.

我有这个:

-(IBAction)changeInkColor:(id)sender
{
    [inkTextField setTextColor:[UIColor greenColor]]; 
    inkTextField.text=@"text";
}
Run Code Online (Sandbox Code Playgroud)

并且实际上只有在视图中没有文本时才会以绿色显示"文本".但是,如果我输入内容然后点击此按钮,则没有任何反应.

cocoa-touch objective-c

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

Autolayout高度等于MAX(多个视图高度)

说我有一个叫做的视图container.container包含5 UIButtons.我想补充的高度NSLayoutConstraintcontainer,这个高度应等于NSLayoutHeightAttribute其子视图最高的按钮.

我没有看到一种直截了当的方式来做到这一点.有人有主意吗?

cocoa-touch ios autolayout

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

重置iOS模拟器中联系人的访问权限?

我想测试联系授权过程,但模拟器不再向我请求许可.我已经尝试重置隐私设置,我已经尝试完全重置模拟器,我已经尝试删除应用程序,但无论如何,它从未要求我的许可.它只是假设我已经授予它.

我正在运行iOS 6模拟器.在SO 上有几个类似的问题,但令人惊讶的是没有像样的答案.真的没办法做到这一点吗?

iphone ios-simulator ios6

22
推荐指数
2
解决办法
5361
查看次数

如何将Swift字符转换为字符串?

我想将a的第一个字母String作为a String而不是Character:

func firstLetter() -> String {
    return self.title[0]
}
Run Code Online (Sandbox Code Playgroud)

但是,有了以上我得到Character is not convertible to String.将字符转换为字符串的正确方法是什么?

这个答案建议创建一个下标扩展,但声明String已经有一个下标方法:

subscript (i: String.Index) -> Character { get }
Run Code Online (Sandbox Code Playgroud)

那个答案是否过时了,还是这两个不同的东西?

string indexing character swift

22
推荐指数
4
解决办法
2万
查看次数

何时调用obtainPermanentIDsForObjects:?

我目前遇到的问题是在后台子线程(其父级是主UI线程上下文)上创建一个新对象,并且保存会导致我NSFetchedResultsController显示两个新对象:一个带有临时对象objectID,另一个带有永久对象objectID.这似乎是某种错误,除非我遗漏了什么.

所以我想我会为我创建的任何新对象手动获取永久ID.这修复了重复的行问题,但引入了新的随机错误(例如"无法实现对象的错误",引用我创建的新对象).如果有人对为什么前面提到的任何事情有任何想法,请分享.

我猜obtainPermanentIDs是朝着正确方向迈出的一步.但是我什么时候打电话给这个方法?在保存到子环境之前?保存孩子之后和父母之前?父母之后?目前我的设置是这样的:

masterMOC - private queue tied to the persistent store, so physical saves happen here
----mainMOC - main queue tied to the UI, child of masterMOC
-------backgroundMOC - private queue, child of mainMOC
Run Code Online (Sandbox Code Playgroud)

因此,如果我创建一个新对象backgroundMOC,我打算立即保存到磁盘(这意味着我将不得不调用save:在所有三个上下文中),我应该在哪里调用obtainPermanentIDs

(或者,除了调用获取永久ID之外,还有其他人有不同的解决方案吗?无论如何,这个方法引入了什么问题?为什么我要调用这个方法?)

更新: 我想我知道发生了什么(虽然这只是一个理论),但不是如何解决它.当数据物理保存到磁盘时,Core Data显然会为对象生成永久ID.所以在我的情况下,直到我在masterMOC上调用save才会发生这种情况.目前我在backgroundMOC上创建新对象时所做的是:

  1. 保存在backgroundMOC上(以便将更改向上推送到mainMOC并且我的表视图可以插入新行)
  2. 保存在mainMOC上(以便我可以准备保存到磁盘)
  3. 保存在masterMOC(最终保存到磁盘)

这里发生的事情是在backgroundMOC上调用save会触发UI更新,并使获取的结果控制器插入一个仍然只有临时ID的新对象.但是然后在masterMOC上调用save会导致所有对象被分配永久ID,这会导致另一个UI更新,为这个"新"对象插入另一行!通过注释掉最后一个masterMOC保存,我不再看到重复的条目.我在这里做错了什么,或者这是某种错误?

另一个更新:我想我已经证实了这个错误.我在backgroundMOC上调用save,然后设置一个计时器,在5秒后调用mainMOC和masterMOC上的save.Immediatley保存到backgroundMOC后,会在我的表中插入一个新行.5秒后(保存main和master时),插入另一个新行.(首先插入的行具有临时ID,最新的插入具有永久ID).

iphone core-data objective-c ios

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

创建允许访问Cloudfront但限制对其他任何人的访问的S3存储桶策略

我有以下政策:

{
        "Version": "2008-10-17",
        "Id": "PolicyForCloudFrontPrivateContent",
        "Statement": [
            {
                "Sid": "Stmt1395852960432",
                "Action": "s3:*",
                "Effect": "Deny",
                "Resource": "arn:aws:s3:::my-bucket/*",
                "Principal": {
                    "AWS": [
                        "*"
                    ]
                }
            },
            {
                "Sid": "1",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1IYJC432545JN"
                },
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::my-bucket/*"
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

但是,这会拒绝来自所有请求者的请求,甚至是Cloudfront.这样做的正确方法是什么?

问题是客户端使用公共读取创建对象.我目前没有立即控制客户端来更改此设置.所以我想要的是拥有一个覆盖单个对象ACL的策略.所以默认否认这里不起作用.

amazon-s3 amazon-cloudfront

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

为什么是!在Swift中称为"隐式"而不是"明确"展开的可选项?

这个名字!总是让我感到困惑:它被称为'隐式解包的可选'.但是,隐含的是什么呢?隐含意味着"隐含但不明白".但是,没有!明确表达其目的吗?不添加!明确表达我们想要实现的目标吗?

swift

17
推荐指数
2
解决办法
3720
查看次数