小编Ada*_*ter的帖子

Swift - 属性上的自定义setter

我正在将一个项目转换为Swift代码,并在setter中遇到了一个问题.我的Objective-C代码看起来像这样:

- (void)setDocument:(MyDocument *)document
{
    if (![_document isEqual:document]) {
        _document = document;

        [self useDocument];
    }
}
Run Code Online (Sandbox Code Playgroud)

并允许我的View Controller在每次设置文档时运行它(通常在prepareForSegue:呈现View Controller 的方法中).

我找到了属性观察者willSet,didSet但它们只在更新属性时才起作用,而不是在初始化和更新时.

有任何想法吗?谢谢

UPDATE

尝试get {}并设置{}后,我收到EXC_BAD_ACCESS错误

var document: UIDocument? {
    get {
        return self.document!
    }
    set {
        self.document = newValue

        useDocument()
    }
}
Run Code Online (Sandbox Code Playgroud)

setter swift

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

在UITableView的标题视图上使用NSLayoutConstraints

我试图将UIView添加到UITableView的标题,然后,使用NSLayoutConstraints我想给它一个高度.

我查看了Apple Docs和WWDC 2012视频,但我无法在任何地方找到此特定错误!

我有以下代码:

- (UIImageView *)logoImageView
{
    if (!_logoImageView) {
        _logoImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo"]];
        [_logoImageView setTranslatesAutoresizingMaskIntoConstraints:NO];
    }
    return _logoImageView;
}
Run Code Online (Sandbox Code Playgroud)

...在viewDidLoad中

UIView *tableHeaderView = [[UIView alloc] init];
tableHeaderView.translatesAutoresizingMaskIntoConstraints = NO;

[tableHeaderView addSubview:self.logoImageView];

[self.tableView setTableHeaderView:tableHeaderView];

NSDictionary *constraintViews = @{@"tableView" : self.tableView, @"tableHeaderView" : tableHeaderView, @"logoImageView" : self.logoImageView};

[self.tableView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[tableHeaderView(50)]"
                                                                       options:0
                                                                       metrics:nil
                                                                         views:constraintViews]];
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,我收到以下错误:

2012-10-08 16:31:34.559 myApp[6934:c07] *** Assertion failure in -[UITableView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2372/UIView.m:5776
2012-10-08 16:31:34.561 myApp[6934:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: …
Run Code Online (Sandbox Code Playgroud)

nslayoutconstraint

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

远程连接到Neo4j服务器

我相信创建远程连接的方法是更改​​此行conf/neo4j-server.properties,特别是通过删除注释并重新启动服务器.

org.neo4j.server.webserver.address=0.0.0.0
Run Code Online (Sandbox Code Playgroud)

我的URL是https://0.0.0.0:7473/browser/在本地机器上工作,但是当我通过3G测试iPhone上的Safari时,它无法连接.

我在属性文件中设置了什么地址?

我以为这是我的电脑的IP地址,但是在尝试了我从Googling" ip address mac " 获得的远程地址后,没有工作,也没有(显然)我机器的本地IP地址,192.168.0.14

我应该指出,将其设置为Google的IP地址会引发错误,日志显示为:

2015-01-29 17:10:08.888+0000 INFO  [API] Failed to start Neo Server on port [7474], reason [MultiException[java.net.BindException: Can't assign requested address, java.net.BindException: Can't assign requested address]]
Run Code Online (Sandbox Code Playgroud)

neo4j

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

在iOS 7中动画UINavigationBar(如Safari)

在Safari中滚动内容时,标题栏会动画显示其自身的较小版本.实现这个的最佳方法是什么?

目前,我正在改变框架的大小,如下所示:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    //
    //  Table view
    //
    CGFloat currentPosition = scrollView.contentOffset.y - CGRectGetHeight(self.tableView.tableHeaderView.frame) + CGRectGetHeight(self.navigationController.navigationBar.frame) + CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]);

    if ([scrollView isKindOfClass:[HeadlinesHeadlinesTableView class]]) {
        ScrollDirection scrollDirection;

        if (self.lastContentOffset > scrollView.contentOffset.y) {
            scrollDirection = ScrollDirectionDown;
        } else if (self.lastContentOffset < scrollView.contentOffset.y) {
            scrollDirection = ScrollDirectionUp;
        }

        self.lastContentOffset = scrollView.contentOffset.y;

        CGRect frame = self.navigationController.navigationBar.frame;
        CGFloat minimumFrameHeight = 30.0f;
        CGFloat maximumFrameHeight = 44.0f;

        CGFloat titleSize = [[self.navigationController.navigationBar.titleTextAttributes objectForKey:NSFontAttributeName] pointSize];
        CGFloat minimumTitleHeight = 22.0f;
        CGFloat maximumTitleHeight = 30.0f;

        if (currentPosition …
Run Code Online (Sandbox Code Playgroud)

uinavigationbar uianimation ios7

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

具有自调整大小单元的UICollectionView使用estimatedItemSize来删除动画

我正在使用UICollectionView自我调整单元格并estimatedItemSize为此设置属性.

但是,在执行删除动画时,如果单元格使用estimatedItemSize属性进行大小调整,则单元格会为其位置设置动画,而不是自动布局(实际)大小.

更糟糕的是,我们的单元格是可变大小,并且似乎没有像UITableView我们可以传递每个索引路径的估计大小的方法.

我试图继承集合视图流布局并覆盖initialLayoutAttributesForAppearingItemAtIndexPath(_:)finalLayoutAttributesForDisappearingItemAtIndexPath(_:),但是在检查时,这些方法的超类的返回值是正确的.

有谁知道这个看似基本的bug的解决方案?

autolayout uicollectionview

11
推荐指数
0
解决办法
542
查看次数

Swift属性 - getter ivar

我们应该在Swift吸气剂中使用ivar属性吗?我的代码导致getter调用getter直到程序崩溃:

var document: UIDocument? {
    get {
        return self.document
    }
    set {
        self.document = newValue

        useDocument()
    }
}
Run Code Online (Sandbox Code Playgroud)

getter swift

10
推荐指数
2
解决办法
7736
查看次数

将数组转换为C++中的set

有没有更简单的方法使用c ++将数组转换为集合而不是循环遍历其元素?

优选使用标准模板库

c++ arrays set

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

带有 UIManagedDocument/核心数据的 FileDocument

使用 SwiftUI 创建基于文档的应用程序时,默认文档类型是子类FileDocument.

所有示例都会导致在此文档类型中使用简单的值类型。

我正在寻找UIManagedDocument在 SwiftUI 中创建一个,但似乎没有提到使用FileDocument核心数据。我注意到了,ReferenceFileDocument但这也没有任何例子......

有人有过使用 SwiftUI 文档类型作为基于核心数据的文档的经验吗?

core-data uimanageddocument swiftui

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

导入Swift自定义框架时没有这样的模块错误

我有一个大而旧的Xcode项目,有很多混合的Objective C/Swift代码.

在想要添加iMessages扩展时,我发现我必须从一个框架开始,在应用程序和扩展之间共享代码.

我通过遵循Ray Wenderlich教程在一个新项目中对此进行了测试,一切都很顺利

在我的旧Xcode项目中尝试这个时,我进入我的应用程序代码的导入阶段导入我的自定义框架,但得到一个No such module ...错误.我已多次检查所有内容,检查自定义框架的所有导入,没有运气.

这个项目多年来已经定制了很多构建设置,我猜这是问题所在?

任何人都可以推荐Xcode项目中的任何Build Settings我可能要仔细检查吗?似乎没有什么不寻常,但我没有想法.

xcode swift-custom-framework

6
推荐指数
0
解决办法
1356
查看次数

CKFetchDatabaseChangesOperation不返回记录区ID

我正在我的应用程序中使用CloudKit,并且首先按照WWDC视频“ CloudKit Best Practises”中的最佳做法进行操作

首先要做的就是检查我喜欢的更改,

let changesOperation = CKFetchDatabaseChangesOperation(previousServerChangeToken: databaseChangeToken)
changesOperation.fetchAllChanges = true
changesOperation.recordZoneWithIDChangedBlock = { self.recordZoneWithIDChanged($0) }
changesOperation.recordZoneWithIDWasDeletedBlock = { self.recordZoneWithIDWasDeleted($0) }
changesOperation.changeTokenUpdatedBlock = { self.changeTokenUpdate($0) }
changesOperation.fetchDatabaseChangesCompletionBlock = { self.fetchDatabaseChangesCompletion($0, isMoreComing: $1, error: $2) }

privateDatabase.add(changesOperation)
Run Code Online (Sandbox Code Playgroud)

我正在为其建立访存的私有数据库中有记录,但是我只得到changeTokenUpdatedBlockfetchDatabaseChangesCompletion

我是说对了,我应该期望recordZoneWithIDChangedBlock在运行此操作时看到有人被击中,并将我的私有数据库的默认区域传递到此块中吗?

这意味着当我调用my时fetchDatabaseChangesCompletion,没有什么可取的,因为记录区ID的数组为空:(请注意,error为nil)

fileprivate func fetchDatabaseChangesCompletion(_ newToken: CKServerChangeToken?, isMoreComing: Bool, error: Error?)
{
    if let error = error
    {
        //  Handle error

        return
    }

    let fetchZoneChangesOperation = CKFetchRecordZoneChangesOperation(recordZoneIDs: changedRecordZoneIDs,
                                                                      optionsByRecordZoneID: nil)
    fetchZoneChangesOperation.recordChangedBlock …
Run Code Online (Sandbox Code Playgroud)

cloudkit ckfetchrecordchangesopera

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