小编Win*_*ero的帖子

通过xib或storyboard将子视图添加到UICollectionViewCell的contentView中

我知道有一个帖子:通过nib向这个问题添加到UICollectionViewCell contentView,但答案是不正确的.将UILabel直接拖动到单元格的xib中,Label将被添加到单元格本身,而不是其contentView:

(lldb) po self.subviews
<__NSArrayM 0x7fa9b1c58a20>(
<UIView: 0x7fa9b1c77540; frame = (0 0; 64 64); gestureRecognizers = <NSArray: 0x7fa9b1c66260>; layer = <CALayer: 0x7fa9b1c352f0>>,
<UILabel: 0x7fa9b1c7a880; frame = (0 15; 64 18); text = 'market share'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7fa9b1c6f820>>,
<UILabel: 0x7fa9b1c77c30; frame = (0 38; 64 22); text = '17.06'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7fa9b1c36fe0>>
)


(lldb) po self.contentView.subviews …
Run Code Online (Sandbox Code Playgroud)

ios uicollectionviewcell

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

我们可以在后台队列中生成Realm结果并在主线程上使用它吗

我最近开始使用Realm,不确定我的用例是否有效:

通常,当从数据库读取大量数据时,我想将其放在后台队列中,以便它将异步获取数据,然后在主线程上使用它。

例如,我想获取一些基于城市的结果:

    private var results: [Results<SomeObject>?] = []
    autoreleasepool {
        DispatchQueue(label: "background").async {
            [unowned self] in
            do
            {
                let realm = try Realm()
                for i in 1...City.count
                {
                    self.results.append(realm.objects(SomeObject.self).filter("city=\(i)"))
                }
            }
            catch
            {
                NSLog("Failed to open Realm instance on background qeueue")
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

稍后用于results更新我的图表:

cell.setChartData(ChartDataFactory.createCombinedData(from: results[0]))

但是,如果我将此模型应用于Realm,则会收到类似

由于未捕获的异常“ RLMException”而终止应用程序,原因:“从错误的线程访问了领域。

我知道我必须为每个线程使用领域,并且可以通过在主线程上读取领域来做到这一点,但是我不希望领域查询阻塞我的主线程。

有什么办法可以实现我的目标?例如,在后台队列中读取领域并从另一个线程访问结果,同时保留自动刷新功能。

谢谢。

realm ios swift

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

如果在类扩展中重新定义属性的内存管理会发生变化吗?

如果我有这样的属性:

//test.h

@interface test
@property (nonatomic, readonly, weak) NSObject x;
@end
Run Code Online (Sandbox Code Playgroud)

在实现文件中重新定义为可读/写:

// test.m
@interface test ()
@property (nonatomic, readwrite) NSObject x;
@end
Run Code Online (Sandbox Code Playgroud)

我在.h中使用弱,但我在扩展中没有说什么,属性是否会保留"弱"说明符,还是会变为"强"?

重新定义属性时,是否会覆盖关键字strong/assign/weak?

memory-management objective-c declared-property

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

什么会触发 viewDidLayoutSubviews 并寻找一个好的模式来初始化子视图框架

我有一个与 Storyboard 中的自动布局相结合的应用程序,一些旧的纯代码视图没有自动布局

在我的 MainViewController 中,我尝试初始化子视图,例如 viewDidLayoutSubviews 和 viewWillAppear 中的边界、约束。因为自动布局问题,我发现在 viewDidLayoutSubviews 中进行初始化是获得父视图边界的正确边界的最佳位置。

但是,我注意到 viewDidLayoutSubviews 在完全稳定下来之前会被调用 2-3 次,所以我必须处理这是我第一次初始化子视图,还是在自动布局后某些约束发生变化或大小发生变化时更新我的​​框架。

现在我想改进它,但我多次无法弄清楚是什么在调用viewDidLayoutSubviews。

我想要的最好的事情是只调用一个 viewDidLayoutSubviews ,之后我可以获得正确的大小来初始化我的子视图。

我尝试搜索,但有人说 viewDidLayoutSubviews 是由系统调用的,所以不能保证它会被调用多少次。如果是这种情况,使用自动布局子视图进行初始化的正确模式是什么?

ios

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

使用Objective-C的应用程序和在发布模式下启动时快速代码崩溃,调试模式正常

我的项目是基于Objective-C的,并且有一些第三方快速代码.

该应用程序在调试模式下运行正常,但是,当我将应用程序存档为发布模式时,应用程序将在启动屏幕时崩溃.

将swift优化级别设置为None仍然存在相同的问题.我安装了crashlytics 3.7,但它在启动时崩溃,它没有机会上传崩溃.我非常绝望.有任何想法吗?

更新:

我试图删除所有快速的东西和存档,一切都像往常一样.但是,一旦我将swift文件拖入基于Objective-C的项目,运行(调试)应用程序就可以了.但如果存档(发布)并将其安装在iPhone上,则会在发布时立即崩溃.什么我错过了什么?

objective-c ios swift

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

golang意外的目录布局

所以我从github.com/minio/minio下载了minio

我想从源代码运行它,

我创建我的目录,如:

~/Downloads/minio-RELEASE.2017-06-13T19-01-01Z
|
 src
   |
    all minio directories, including vendor, like the image below
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我还使用godep解决GOPATH下的其他依赖项.

现在我从Gogland运行它(去IDE)

表明:

GOROOT=/usr/local/Cellar/go/1.8.3/libexec
GOPATH=/Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z:/Users/xl/go
/usr/local/Cellar/go/1.8.3/libexec/bin/go build -i -o /private/var/folders/8v/6dg7d6mx2850sv1gp8ts9thm0000gn/T/go_run_main_gogo /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src/main.go
unexpected directory layout:
    import path: github.com/Azure/azure-sdk-for-go/storage
    root: /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src
    dir: /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src/vendor/github.com/Azure/azure-sdk-for-go/storage
    expand root: /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src
    expand dir: /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src/vendor/github.com/Azure/azure-sdk-for-go/storage
    separator: /
Run Code Online (Sandbox Code Playgroud)

现在我很困惑,问题是什么?文件都在那里,目录就像它的打印一样.我如何解决它?谢谢.

go goland

5
推荐指数
3
解决办法
8001
查看次数

'UnsafePointer&lt;Int&gt;' 的初始化导致悬空指针

所以我有一些代码来创建 H264ParameterSets,如:

var formatDesc: CMVideoFormatDescription?

func createH264FormatDescription(SPS: Array<UInt8>, PPS: Array<UInt8>) -> OSStatus {
    if formatDesc != nil { formatDesc = nil }

    let paramSet = [UnsafePointer<UInt8>(SPS), UnsafePointer<UInt8>(PPS)]
    let paramPointers = UnsafePointer<UnsafePointer<UInt8>>(paramSet)
    let paramSizes = UnsafePointer<Int>([SPS.count, PPS.count])

    let status = CMVideoFormatDescriptionCreateFromH264ParameterSets(allocator: kCFAllocatorDefault, parameterSetCount: 2, parameterSetPointers: paramPointers, parameterSetSizes: paramSizes, nalUnitHeaderLength: 4, formatDescriptionOut: &formatDesc)

    return status
}
Run Code Online (Sandbox Code Playgroud)

从 Xcode 11.4 开始,我收到了那些 UnsafePointer() 的警告,这在以前似乎没有发生过:

Initialization of UnsafePointer<UInt8> results in a dangling pointer

Initialization of UnsafePointer<UnsafePointer<UInt8>> results in a dangling pointer

Initialization of UnsafePointer<Int> results …
Run Code Online (Sandbox Code Playgroud)

ios swift

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

如何过滤单次点击事件和双击事件的快速多次点击

我有以下手势设置:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                            action:@selector(singleTapDetected:)];
singleTap.numberOfTapsRequired = 1;
[self addGestureRecognizer:singleTap];

UITapGestureRecognizer *doubleClick = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                              action:@selector(doubleClickDetected:)];
doubleClick.numberOfTapsRequired = 2;
[self addGestureRecognizer:doubleClick];

[singleTap requireGestureRecognizerToFail:doubleClick];
Run Code Online (Sandbox Code Playgroud)

当我快速点击 3 次时,我发现它将被转换为一次双击事件和一次单击事件,并为我的应用程序引入了一个错误。

我想要的东西是,如果用户点击 3 次或更多次,则只会触发双击事件。有人可以帮忙解决这个问题吗?预先感谢。

uigesturerecognizer ios

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

错误:十六进制转义序列超出范围

尝试与字符串进行比较: BOOL r = [res isEqualToString:[@"\x124Vx\xc3\xaa"]];

但是我得到了

错误:十六进制转义序列超出范围

我也尝试过类似的东西:

NSString *s = [@"\x12" stringByAppendingString: @"4Vx\xc3\xaa"];
BOOL r = [res isEqualToString:s];
Run Code Online (Sandbox Code Playgroud)

现在它可以工作并返回 YES

如何指定这样的字符串并避免先将它们拆分?有点烦...

更新:我使用@rmaddy 的代码,它现在可以工作,但是,如果我将它放在数组中,例如:

NSArray *answers = @[
                     @"",
                     @"#",
                     @"\x12""4Vx\xc3\xaa",
                     ] 
Run Code Online (Sandbox Code Playgroud)

它将为最后一个字符串文字生成警告:

NSArray 表达式的串联 NSString 文字 - 可能缺少逗号 如何摆脱它?

使用

NSString *s = @"\x12""4Vx\xc3\xaa";
NSArray *arr = @[s];
Run Code Online (Sandbox Code Playgroud)

可以工作,但我不想写更多的 NSString *s ... 来做到这一点。

objective-c

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

导入org.robolectric时Android Studio找不到包

我正在使用黄油刀包装:8.5.1,当我想添加robolectric时,gradle表示com.google.guava已限制:

错误:在项目':app'中与依赖项'com.google.guava:guava'发生冲突。应用(18.0)和测试应用(20.0)的已解决版本不同。有关详情,请参见http://g.co/androidstudio/app-test-app-conflict

我检查了依赖性,并且因为ButterKnife使用的是guava18,所以我使用

configurations.all {
    resolutionStrategy {
        force 'com.google.guava:guava:20.0'
    }
}
Run Code Online (Sandbox Code Playgroud)

尽量避免,现在gradle将会建立而不会出错。

但是,当我想使用该软件包时,Android Studio总是会抱怨

导入org.robolectric.Robolectric;

它说找不到org.robolectric。我不知道发生了什么,有人可以帮忙吗?非常感谢。

然后我也尝试了

exclude group: 'com.google.guava', module: 'guava'
Run Code Online (Sandbox Code Playgroud)

也是一样的结果

我怀疑它与有关com.google.guava,但我不明白为什么找不到包。我可以在“外部库”下看到robolectric包

android robolectric

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

CGContextRotateCTM无法旋转UIImage

我想绘制一个删除按钮就像主屏幕上的删除应用程序按钮,如下面的代码.

想法是首先画十字架,然后旋转45度.我的代码出了什么问题?

self.deleteButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, BADGE_SIZE, BADGE_SIZE)];

if (!deleteBtnImg) {
    CGRect imgFrame = self.deleteButton.bounds;

    UIGraphicsBeginImageContextWithOptions(imgFrame.size, NO, 0.0);

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    CGFloat size = MIN(imgFrame.size.width, imgFrame.size.height);
    UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(imgFrame.size.width/2, imgFrame.size.height/2)
                                                        radius:size/2-RADIUS_MARGIN
                                                    startAngle:0
                                                      endAngle:M_PI * 2
                                                     clockwise:YES];
    [path moveToPoint:CGPointMake(size / 2, 0)];
    [path addLineToPoint:CGPointMake(size / 2, size)];
    [path moveToPoint:CGPointMake(0, size / 2)];
    [path addLineToPoint:CGPointMake(size, size / 2)];
    [[UIColor whiteColor] setFill];
    [[UIColor redColor] setStroke];
    [path setLineWidth:1.0];
    [path fill];
    [path stroke];

    CGContextRotateCTM(context, M_PI/4);

    deleteBtnImg = UIGraphicsGetImageFromCurrentImageContext();
    CGContextRestoreGState(context); …
Run Code Online (Sandbox Code Playgroud)

core-graphics ios

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