我知道有一个帖子:通过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) 我最近开始使用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”而终止应用程序,原因:“从错误的线程访问了领域。
我知道我必须为每个线程使用领域,并且可以通过在主线程上读取领域来做到这一点,但是我不希望领域查询阻塞我的主线程。
有什么办法可以实现我的目标?例如,在后台队列中读取领域并从另一个线程访问结果,同时保留自动刷新功能。
谢谢。
如果我有这样的属性:
//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?
我有一个与 Storyboard 中的自动布局相结合的应用程序,一些旧的纯代码视图没有自动布局
在我的 MainViewController 中,我尝试初始化子视图,例如 viewDidLayoutSubviews 和 viewWillAppear 中的边界、约束。因为自动布局问题,我发现在 viewDidLayoutSubviews 中进行初始化是获得父视图边界的正确边界的最佳位置。
但是,我注意到 viewDidLayoutSubviews 在完全稳定下来之前会被调用 2-3 次,所以我必须处理这是我第一次初始化子视图,还是在自动布局后某些约束发生变化或大小发生变化时更新我的框架。
现在我想改进它,但我多次无法弄清楚是什么在调用viewDidLayoutSubviews。
我想要的最好的事情是只调用一个 viewDidLayoutSubviews ,之后我可以获得正确的大小来初始化我的子视图。
我尝试搜索,但有人说 viewDidLayoutSubviews 是由系统调用的,所以不能保证它会被调用多少次。如果是这种情况,使用自动布局子视图进行初始化的正确模式是什么?
我的项目是基于Objective-C的,并且有一些第三方快速代码.
该应用程序在调试模式下运行正常,但是,当我将应用程序存档为发布模式时,应用程序将在启动屏幕时崩溃.
将swift优化级别设置为None仍然存在相同的问题.我安装了crashlytics 3.7,但它在启动时崩溃,它没有机会上传崩溃.我非常绝望.有任何想法吗?
更新:
我试图删除所有快速的东西和存档,一切都像往常一样.但是,一旦我将swift文件拖入基于Objective-C的项目,运行(调试)应用程序就可以了.但如果存档(发布)并将其安装在iPhone上,则会在发布时立即崩溃.什么我错过了什么?
所以我从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)
现在我很困惑,问题是什么?文件都在那里,目录就像它的打印一样.我如何解决它?谢谢.
所以我有一些代码来创建 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) 我有以下手势设置:
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 次或更多次,则只会触发双击事件。有人可以帮忙解决这个问题吗?预先感谢。
尝试与字符串进行比较:
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 ... 来做到这一点。
我正在使用黄油刀包装: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包
我想绘制一个删除按钮就像主屏幕上的删除应用程序按钮,如下面的代码.
想法是首先画十字架,然后旋转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)