小编Jor*_*ndo的帖子

NDK 11链接器将警告视为错误

我正在尝试用android ndk-11构建一个库,我收到一个链接器错误:

arm-linux-androideabi/bin/ld: error: treating warnings as errors

如果我使用ndk-r10e,我不会收到此错误.

运行ndk-build,V = 1,我看到它-Wl,--fatal-warnings正被传递给链接器.我已经尝试添加LOCAL_LDFLAGS:=-Wl,--no-fatal-warnings到我的Android.mk文件,我可以在链接器输出中看到它实际上是传递给链接器,但它之前 被传递-Wl,--fatal-warnings,因此它被忽略.

警告来自第三方库,所以我不能只是重新编译它来修复警告(它们都是'重定位是指丢弃部分'警告).我一直看到这些警告,从来没有遇到任何问题.

有谁知道如何告诉ndk-11链接器不要将警告视为错误?

android android-ndk

9
推荐指数
1
解决办法
4336
查看次数

UIScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset使用pagingEnabled = YES调用

根据Apples文档(以及许多其他地方),如果UIScrollView.pagingEnabled设置为YES,则不会调用UIScrollViewDelegate:scrollViewWillEndDragging:withVelocity:targetContentOffset.在iOS6上,这似乎是真的,但是,在iOS7上,无论设置什么是pagingEnabled,它总是被我调用.

这是一个简单的测试视图控制器:

@interface ViewController ()
<UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@end

@implementation ViewController

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
    NSLog(@"%d", scrollView.pagingEnabled);
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self loadHTML];
    [self configureWebView];
}

- (void)loadHTML
{
    NSString* htmlPath = [[NSBundle mainBundle] pathForResource:@"htmlContent" ofType:@"html"];
    NSString* htmlString = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];
    [_webView loadHTMLString:htmlString baseURL:nil];
}

- (void)configureWebView
{
    [_webView.scrollView setDelegate:self];
    _webView.scrollView.pagingEnabled = YES;
}

@end
Run Code Online (Sandbox Code Playgroud)

在iOS7中,如果pagingEnabled == YES,则scrollViewWillEndDragging中的NSLog打印1,如果设置为NO,则打印0.

在iOS6中,当pagingEnabled == YES时,控制台输出为:

Stop offset can not be modified for …
Run Code Online (Sandbox Code Playgroud)

objective-c uiscrollview uiscrollviewdelegate ios

8
推荐指数
0
解决办法
1026
查看次数

同时更新多个视图约束

有没有办法告诉自动布局引擎,在运行时,我将同时更改视图上的多个约束?我一直遇到这样一种情况,即我更新约束的顺序很重要,因为即使完成所有约束条件的所有操作都满足,但在另一个之前更改常量会抛出LAYOUT_CONSTRAINTS_NOT_SATISFIABLE异常(或任何异常)实际上被称为...)

这是一个例子.我创建并添加一个视图到我当前的视图并设置一些约束.我正在保存前导和后沿约束,所以我可以稍后更改它们的常量.

- (MyView*)createMyView
{
    MyView* myView = [[MyView alloc init];

    [myView setTranslatesAutoresizingMaskIntoConstraints:NO];
    [self.mainView addSubview:myView];

    NSDictionary* views = @{@"myView" : myView};
    NSLayoutConstraint* leading = [NSLayoutConstraint constraintWithItem:myView
                                                               attribute:NSLayoutAttributeLeading
                                                               relatedBy:NSLayoutRelationEqual
                                                                  toItem:self.view
                                                               attribute:NSLayoutAttributeLeading
                                                              multiplier:1.0f
                                                                constant:0];
    NSLayoutConstraint* trailing = [NSLayoutConstraint constraintWithItem:myView
                                                                attribute:NSLayoutAttributeTrailing
                                                                relatedBy:NSLayoutRelationEqual
                                                                   toItem:self.view
                                                                attribute:NSLayoutAttributeTrailing
                                                               multiplier:1.0f
                                                                 constant:0];
    myView.leadingConstraint = leading;
    myView.trailingConstraint = trailing;

    [self.view addConstraints:@[leading, trailing]];

    NSString* vflConstraints = @"V:|[myView]|";
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vflConstraints
                                                                      options:NSLayoutFormatAlignAllCenterX
                                                                      metrics:nil
                                                                        views:views]];
    return myView;
}
Run Code Online (Sandbox Code Playgroud)

当视图上的滑动手势触发时,我会根据滑动的方向创建一个或另一侧的新视图.然后我更新约束和动画,以便新的传入视图将旧视图"推"出视图.

- (void)transitionToCameraView:(MyView*)newCameraView
                swipeDirection:(UISwipeGestureRecognizerDirection)swipeDirection
{
    // Set new view off screen before adding to parent …
Run Code Online (Sandbox Code Playgroud)

objective-c ios autolayout

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

Android Dagger 2 POJO字段注入null

刚开始使用Dagger 2,我对如何设置一切感到困惑.

我正在尝试注入一个POJO,但它总是为空.首先,一些代码:

App.java

private AppComponent appComponent;

@Override
public void onCreate() {
    super.onCreate();
    appComponent = DaggerAppComponent
            .builder()
            .appModule(new AppModule(this))
            .build();
}

public AppComponent component() {
    return appComponent;
}
Run Code Online (Sandbox Code Playgroud)

AppModule.java

@Module
public class AppModule {
    private Application app;

    public AppModule(Application app) {
        this.app = app;
    }

    @Provides @Singleton
    public Application application() {
        return app;
    }
}
Run Code Online (Sandbox Code Playgroud)

AppComponent.java

@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
    void inject(App application);
    Application application();
}
Run Code Online (Sandbox Code Playgroud)

NetworkingManager.java

@Singleton
public class NetworkingManager {
    private Context ctx;

    @Inject …
Run Code Online (Sandbox Code Playgroud)

android dependency-injection dagger-2

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

CocoaPods更新正在降级已安装的pod

当我运行时pod update,MMDrawerController正在从当前安装的版本(0.5.7)降级到较旧的版本(0.4.0).

这是我的Podfile的内容:

source 'https://github.com/CocoaPods/Specs.git'

link_with 'OpenEye-Mobile', 'SecurityStar Tests'

platform :ios, '7.0'

pod 'AFNetworking', '~> 2.5.0'
pod 'MBProgressHUD', '~> 0.9'
pod 'MMDrawerController'
pod 'MMDrawerController+Storyboard', '~> 0.0.1'
pod 'UIAlertView+Blocks', '~> 0.8.1'

target :"SecurityStar Tests" do
  pod 'OCMock', '~> 3.1.1'
end
Run Code Online (Sandbox Code Playgroud)

我刚刚将cocoapods宝石从v.3.44更新到0.35.0.我对Podfile的唯一更改是AFNetworking从2.3.1 更新到2.5.0.如果我尝试明确指定MMDrawerController为v.5.5.7,则会出现依赖性错误:

- `MMDrawerController (= 0.5.7)` required by `Podfile`
- `MMDrawerController (~> 0.4.0)` required by `MMDrawerController+Storyboard (0.0.1)`
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?为什么这是一个突然出现的问题?cocoapods 0.35有什么变化吗?有没有办法可以强迫MMDrawerController+Storyboard你做好MMDrawerController (= 0.5.7)

objective-c ios cocoapods

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

运行单元测试时,每隔两次Xcode 10“无法安装此应用程序”

自从更新到Xcode 10之后,我必须运行两次单元测试才能使其真正运行。

我第一次收到“目前无法安装此应用程序:无法从束路径....加载Info.plist”。

我第二次运行它执行得很好。

看起来好像是第一次运行它只是试图从模拟器中清理或重新安装该应用程序-大约有一半的时间,当我在警报中将“应用程序从模拟器中删除”时,单击“确定”。

每次在模拟器中运行实际的应用程序都可以正常工作。

有没有其他人看到过此内容?我是否错过了一些新的单元测试配置?

unit-testing ios xcode10

5
推荐指数
0
解决办法
324
查看次数

带有gradle包装器的Kotlin枚举类构建中的无效方法声明

我有以下Kotlin枚举类:

enum class DurationModifier {
    GreaterThan {
        override val displayName = "?"
    },
    LessThan {
        override val displayName = "?"
    };

    abstract val displayName: String
}
Run Code Online (Sandbox Code Playgroud)

很长时间以来,它一直是我项目的一部分,并且可以很好地进行编译。使用IntelliJ或Android Studio可以很好地进行编译,但是当我从命令行(./gradlew assembleDebug)手动运行gradle build时,我得到了:

e: {projectDir}/build/tmp/kapt3/stubs/{package}/search/DurationModifier.java:17: error: invalid method declaration; return type required
        DurationModifier() {
        ^
Run Code Online (Sandbox Code Playgroud)

我已经彻底清理了所有我能想到的东西(构建目录,gradle缓存等)。

我最近做了很多更改,但是由于IDE一切正常,所以我不知道是什么原因引起的。怎么了 为什么这在IDE中有效但在命令行中无效?

android kotlin android-gradle-plugin kapt

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

从另一个 Swift 类访问 Obj-C 类中实现的 Swift 协议属性

我见过很多关于在 Swift 中实现 Obj-C 协议的问题,但反之则不然,而且我还没有具体看到这一点。

我正在使用混合 Obj-C / Swift 代码库。我有一个 Swift 协议定义如下:

命名项目.swift

@objc protocol NamedItem {
    var name: String { get }
}
Run Code Online (Sandbox Code Playgroud)

我有一个现有的 Objective-C 类,它目前拥有自己的name属性:

MyObjcClass.h

@interface MyObjcClass : NSObject
@property (nonatomic, strong, readonly) NSString* name;
@end
Run Code Online (Sandbox Code Playgroud)

我还有其他几个具有name属性的类,因此显然我想将它们全部与协议关联起来,而不是类型转换为一堆不同的类型。现在,如果我尝试将 Obj-C 类从拥有自己的属性切换为实现 Swift 协议:

MyObjcClass.h

@protocol MyObjcProtocol
@property (nonatomic, strong, readonly) NSString* place;
@end

@interface MyObjcClass : NSObject
@end
Run Code Online (Sandbox Code Playgroud)

MyObjcClass.m

@interface MyObjcClass () <NamedItem>
@end

@implementation MyObjcClass
@synthesize name = _name;
@synthesize place = _place;
@end …
Run Code Online (Sandbox Code Playgroud)

compiler-errors objective-c swift objective-c-swift-bridge swift-protocols

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

SwiftUI 预览因链接器错误而失败

我试图将 SwiftUI 视图添加到现有的基于 UIKit + Storyboards 的 tvOS 项目中。实际构建工作正常,我可以在模拟器中运行并查看我的 SwiftUI 视图,但是当我恢复 SwiftUI 预览时,我收到“无法构建 MyClass.swift”并显示以下诊断信息:

SwiftUI 预览构建错误

我看到了关于该错误的类似 SO 帖子-bundle and -bitcode_bundle cannot be used together,但我的配置已经是答案建议的方式(将 Mach-O 类型设置为可执行文件并确保未设置捆绑加载程序)。

还有一个关于/Applications/Xcode.app/Contents/SharedFrameworks-appletvsimulator找不到的警告。该目录当然不存在,但我的项目中没有任何地方SharedFrameworks-appletvsimulator可以找到它。另外,如果我创建一个新的 SwiftUI 项目,它不会抱怨这一点。

SwiftUI 代码实际上只是 Xcode 模板中的一个新的“Hello World”SwiftUI 文件 - 我根本没有修改它。

有谁知道这里发生了什么或如何解决它?

tvos swiftui

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

在 SwiftUI 中处理 tvOS 上的焦点事件更改

如何在 SwiftUI 中响应 tvOS 上的焦点事件?

我有以下 SwiftUI 视图:

struct MyView: View {
    var body: some View {
        VStack {
            Button(action: {
                print("Button 1 pressed")
            }) {
                Text("Button 1")
            }.focusable(true) { focused in
                print("Button 1 focused: \(focused)")
            }
            Button(action: {
                print("Button 2 pressed")
            }) {
                Text("Button 2")
            }.focusable(true) { focused in
                print("Button 2 focused: \(focused)")
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

单击任一按钮即可正确打印。但是,在两个按钮之间更改焦点不会打印任何内容。

这个家伙正在对列表中的行做同样的事情,并说它开始为他使用 Xcode 11 GM 工作,但我使用的是 11.5,它绝对不起作用(至少不适用于按钮(或切换 - 我也尝试过) ))。

阅读文档,这似乎是解决此问题的正确方法,但它似乎实际上不起作用。我错过了什么,还是这只是坏了?

tvos swiftui

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

针对 Android API 30 时无法绑定 () netlink 套接字

我已经使用以下命令创建一个 netlink 套接字已经有一段时间了:

NetLinkLocalNetworkInfo::NetLinkSocket::NetLinkSocket() :
fd(0)
{
    fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
    if(fd < 0)
    {
        throw std::runtime_error("Failed to create NetLink socket");
    }

    struct sockaddr_nl addr;
    memset(&addr, 0, sizeof(addr));
    addr.nl_family = AF_NETLINK;

    int err = bind(fd, (struct sockaddr*)&addr, sizeof(addr));
    if(err < 0)
    {
        close(fd);
        throw std::runtime_error("Failed to bind NetLink socket");
    }
}
Run Code Online (Sandbox Code Playgroud)

这用于我们使用ICE执行自动 NAT 遍历的网络逻辑的一部分。当针对 API 30 时,调用bindnow 返回 -1 并且errno“权限被拒绝”。

现在,针对 API 30 的应用程序的行为发生了变化,这意味着这bind()是一个受限的调用。(谷歌开发者页面上有一个文档,但如果我能再次找到它,我就该死了。它曾经在这里,但自从几个月前我第一次遇到这个问题以来,该页面已经改变了。)应该会影响所有针对 API 30 的应用程序,但我发现只有针对 API 30并 …

android android-ndk netlink

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

通过比较每种类型的值,从另外两个不同类型的列表中创建一个新列表

我有两个对象列表,它们都实现了一个接口,但在其他方面是不相关的.如何创建一个新的对象集合,其中只包含与其他列表中的值匹配的其中一个列表的对象?

显然我可以使用for循环并手动执行此操作,但我想知道如何使用Kotlin的标准库集合过滤功能来完成此操作.

所以这是一个例子:

interface Ids
{
    val id: Int
}

data class A(override val id: Int, val name: String) : Ids
data class B(override val id: Int, val timestamp: Long) : Ids

fun main(args: Array<String>) {
    val a1 = A(1, "Steve")
    val a2 = A(2, "Ed")
    val aCol = listOf(a1, a2)

    val b2 = B(2, 12345)
    val b3 = B(3, 67890)
    val bCol = listOf(b2, b3)

    val matches = mutableListOf<B>()
    // This is where I'm stuck.
    // I want to …
Run Code Online (Sandbox Code Playgroud)

filtering list kotlin

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