小编Dav*_*rry的帖子

在Swift中使用dispatch_once单例模型

我正在尝试找出适合在Swift中使用的单例模型.到目前为止,我已经能够得到一个非线程安全模型:

class var sharedInstance: TPScopeManager {
    get {
        struct Static {
            static var instance: TPScopeManager? = nil
        }

        if !Static.instance {
            Static.instance = TPScopeManager()
        }

        return Static.instance!
    }
}
Run Code Online (Sandbox Code Playgroud)

在Static结构中包装单例实例应允许单个实例在没有复杂命名方案的情况下不与单例实例发生冲突,并且它应该使事情变得相当私密.显然,这个模型不是线程安全的,所以我尝试将dispatch_once添加到整个事情中:

class var sharedInstance: TPScopeManager {
    get {
        struct Static {
            static var instance: TPScopeManager? = nil
            static var token: dispatch_once_t = 0
        }

        dispatch_once(Static.token) { Static.instance = TPScopeManager() }

        return Static.instance!
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到一个编译器错误dispatch_once:

无法将表达式的类型'Void'转换为'()'类型

我已经尝试了几种不同的语法变体,但它们似乎都有相同的结果:

dispatch_once(Static.token, { Static.instance = TPScopeManager() })
Run Code Online (Sandbox Code Playgroud)

dispatch_once使用Swift 的正确用法是什么?我最初认为问题出在块中,因为dispatch_once错误消息,但我看的越多,我认为可能是获得() …

singleton dispatch swift

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

使用依赖项链接动态库

请考虑以下情形:

  • 共享库libA.so,没有依赖项.
  • 共享库libB.so,libA.so作为其依赖项.

我想编译一个与libB链接的二进制文件.我应该仅将二进制文件与libB或libA链接?

有没有办法只链接直接依赖关系,让运算符的依赖关系解析未解析的符号?

我担心库libB实现将来可能会发生变化,引入其他依赖项(例如libC,libD,libE).我会遇到问题吗?

换一种说法:

  • libA文件:a.cpp啊
  • libB文件:b.cpp bh
  • 主程序文件:main.cpp

当然,b.cpp包含ah而main.cpp包含bh

编译命令:

g++ -fPIC a.cpp -c
g++ -shared -o libA.so a.o

g++ -fPIC b.cpp -c -I.
g++ -shared -o libB.so b.o -L. -lA
Run Code Online (Sandbox Code Playgroud)

我应该使用哪种波纹管选项?

g++ main.cpp -o main -I. -L. -lB
Run Code Online (Sandbox Code Playgroud)

要么

g++ main.cpp -o main -I. -L. -lB -lA
Run Code Online (Sandbox Code Playgroud)

我无法使用第一个选项.链接器抱怨库libA中未解析的符号.但这听起来有点奇怪.

非常感谢.

- 更新评论:

当我链接二进制文件时,链接器将尝试解析main和libB中的所有符号.但是,libB具有来自libA的未定义符号.这就是链接器抱怨的原因.

这就是我需要与libA联系的原因.但是我发现了一种忽略共享库中未解析符号的方法.看起来我应该使用以下命令行来做到这一点:

g++ main.cpp -o main -I. -L. -lB -Wl,-unresolved-symbols=ignore-in-shared-libs
Run Code Online (Sandbox Code Playgroud)

看起来仍然可以使用该-rpath选项.但是我需要更好地理解它.

有没有人知道使用该-Wl,-unresolved-symbols=ignore-in-shared-libs选项时可能存在的任何陷阱?

- 更新评论2:

-rpath不应该用于此目的.强制在给定目录中找到库是很有用的.这种-unresolved-symbol方法看起来好多了.

再次感谢.

dll dependencies gcc g++

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

用swift导致CGBitmapContextCreate错误

我试图在swift中创建一个CGContext.它编译但在运行时抛出错误.

let colorSpace:CGColorSpace = CGColorSpaceCreateDeviceRGB()
let context:CGContext = CGBitmapContextCreate(nil, 20, 20, 8, 0, colorSpace, CGBitmapInfo.AlphaInfoMask)
CGColorSpaceRelease(colorSpace);

....
Run Code Online (Sandbox Code Playgroud)

错误是:

Error: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; unrecognized; 96 bytes/row.
fatal error: Can't unwrap Optional.None
Run Code Online (Sandbox Code Playgroud)

cgcontext swift

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

如何使我的Android SwipeableCardViews更像IOS 7邮件应用程序(滑动以显示按钮)

如何使我SwipeableCardViews更像IOS 7邮件应用程序(滑动以显示按钮)

到目前为止,我已经创建了一个Android应用程序,允许用户Cardviews向左或向右滑动.每张卡都有2个按钮,我将在以后分配功能.

(如下图所示):

在此输入图像描述

我想要完成的是(但还不知道如何),而不是向左或向右滑动以完全移除卡片.

相反,我想要滑动手势,以显示隐藏在右侧左侧卡片下方的按钮.

IOS 7邮件应用程序已经执行此功能(下面的屏幕截图)我想在Android中使用Cardviews (不是ListViews)执行此操作.

我该怎么做呢?

在此输入图像描述

我的代码到目前为止:

MainActivity.java

public class MainActivity extends ActionBarActivity {
    private RecyclerView mRecyclerView;
    private CardViewAdapter mAdapter;

    private ArrayList<String> mItems;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mItems = new ArrayList<>(30);
        for (int i = 0; i < 30; i++) {
            mItems.add(String.format("Card number %2d", i));
        }

        OnItemTouchListener itemTouchListener = new OnItemTouchListener() {
            @Override
            public void onCardViewTap(View view, int position) { …
Run Code Online (Sandbox Code Playgroud)

java android android-layout android-activity

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

xcode 6 beta 4 - MessageComposeResult不能转换为OptionalNilComparisonType

我刚刚从Xcode 6 Beta 3升级到Beta 4.在3我的应用程序完美编译然而在4我有以下错误.任何人都可以解释并提供解决方案.

func messageComposeViewController(sendMsg: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult) {

    switch result {

    case MessageComposeResultSent :    //Error: MessageComposeResult is not convertible to _OptionalNilComparisonType
        label2.text = "Msg Sent"

    case MessageComposeResultCancelled : //Error: MessageComposeResult is not convertible to _OptionalNilComparisonType
        label2.text = "Msg Send Cancelled"

    case MessageComposeResultFailed :   //Error: MessageComposeResult is not convertible to _OptionalNilComparisonType
        label2.text = "Msg Send Failed"

    default:
        label2.text = "Msg Error"

    }

    self.dismissViewControllerAnimated(true, completion: nil)
    self.reloadInputViews()

}
Run Code Online (Sandbox Code Playgroud)

ios swift xcode6

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

在iOS 8上将视频分享到Facebook

我有一些适用于iOS 7的共享代码,但从iOS 8开始,不再有效.

@IBAction func onShareButton(sender: UIButton) {
    let movie = NSBundle.mainBundle().URLForResource("IMG_0564", withExtension: "mp4")!
    let items = [movie]
    let activity = UIActivityViewController(activityItems: items, applicationActivities: nil)
    if activity.respondsToSelector("popoverPresentationController") {
        activity.popoverPresentationController?.sourceView = sender
    }
    self.presentViewController(activity, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

正如我所说,这在iOS 7中运行良好,但是从iOS 8开始,当我选择分享到Facebook时,视频剪辑不再附加到帖子(或在共享面板中可见).所有其他选项工作,邮件,保存到视频,AirDrop等都似乎工作正常.

我也尝试将这些项目作为AVAssets传递:

    let items = [movie].map { AVAsset.assetWithURL($0) }
Run Code Online (Sandbox Code Playgroud)

和NSData:

    let items = [movie].map { NSData(contentsOfURL: $0) }
Run Code Online (Sandbox Code Playgroud)

这两者都没有对这个问题产生任何影响.

如果我在Objective-C中使用道德等价物,那么问题也会发生,它与语言无关.

facebook ios uiactivityviewcontroller ios8

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

在Swift中应用openURL

我遇到了Appdelegate方法OpenURL的问题.

我已经设置了导入的UTI和文档类型.但是当从邮件附件打开我的应用程序时,当我实施该方法时,应用程序会立即崩溃.

折旧的handleOpenURL有效,但不是OpenURL吗?

目前我在实现中没有代码,我只是返回true.

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?) -> Bool {
    return true
}
Run Code Online (Sandbox Code Playgroud)

崩溃说 Thread 1: EXC_BAD_ACCESS (code-1, address-0x0)

我真的不想使用已弃用的方法.

appdelegate swift ios8

6
推荐指数
2
解决办法
4469
查看次数

如何将 windowFixedHeightMinor/Major 与 DialogFragment 一起使用

我试图windowFixedHeightMinor与自定义结合使用DialogFragment来创建固定大小(实际上按比例大小)的对话框。

我正在我的主题中设置主题onCreate

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NORMAL, R.style.MyDialog);
}
Run Code Online (Sandbox Code Playgroud)

主题:

<style name="MyDialog" parent="Base.Theme.AppCompat.Light.Dialog.FixedSize">
    <item name="android:windowBackground">@color/light_blue</item>
    <item name="android:windowMinWidthMajor">80%p</item>
    <item name="android:windowMinWidthMinor">80%p</item>
    <item name="windowFixedHeightMinor">80%p</item>
    <item name="windowFixedHeightMajor">80%p</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我可以看到它被应用到我的对话框(这就是设置背景的原因)并且 windowMinWidthMajor 被应用,因为对话框大约是屏幕尺寸的 80%。但是,对话框始终占据屏幕的整个高度。

对话框本身显示:

MyDialogFragment.newInstance().show(getFragmentManager(), "dialog");
Run Code Online (Sandbox Code Playgroud)

主要供参考,对话框本身如下所示,尽管我尝试从其中剥离几乎所有内容并获得类似的结果。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <Button
        android:text="@string/accept"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/done"

        android:layout_margin="16dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        />

    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:layout_above="@id/done"
        >

        <RadioGroup
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >

            <RadioButton
                android:text="Pink"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/pink"
                android:layout_weight="1" />

            <RadioButton
                android:text="Purple"
                android:layout_width="wrap_content" …
Run Code Online (Sandbox Code Playgroud)

android dialogfragment

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

Android相当于UIImageJPEGRepresentation?

我在移植到Android的iOS应用程序中有一个照片上传图像小部件.数据以multipart/form-data格式作为HTTP POST发送.我需要在Android中复制这个但是遇到了一些问题.

现有的iOS代码段:

if ([[dictionary objectForKey:key] isKindOfClass:[UIImage class]]) {
                        NSData *imageJPEG = UIImageJPEGRepresentation([dictionary objectForKey:key], 1);
                        NSString *filename = [NSString stringWithFormat:@"%@.jpg", key];
                        [(ASIFormDataRequest *)request setData:imageJPEG withFileName:filename andContentType:@"image/jpeg" forKey:key];
                    }
Run Code Online (Sandbox Code Playgroud)

在Android上我正在尝试:

Bitmap fullImage = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
fullImage.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
String encodedImage = Base64.encodeToString(b, Base64.DEFAULT);
Run Code Online (Sandbox Code Playgroud)

结果字符串对于两个平台上的相同图像是不同的,但结果是Android图像在上载后不在服务器端呈现.

什么是UIImageJPEGRepresentation的Android/Java相当于将图像转换为包含jpeg编码图像的字节数组?

android

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

UIBlurEffect不会在设备上模糊但在模拟器中工作

我正在尝试使用UIView带有效果的UIVisualEffectView子视图UIBlurEffect.视图在屏幕一侧创建,然后使用动画滑入.

在模拟器上一切正常(我在iPhone 4S和iPhone 6上测试过)但是在我的手机(iPhone 6)上,模糊不会模糊,看起来更像alpha是0.5的深灰色.此外,当我拍摄设备的屏幕截图或从主屏幕打开它时,在再次开始一致渲染之前,将为该单帧渲染模糊.

这是目前视图的截图: 在此输入图像描述

然而,在设备上模糊不存在,它基本上只是一个黑暗,透明的视图.

这是我用来初始化视图的代码,blurViewvibrancyView属性被声明为全局变量:

init(left: Bool){
    self.left = left
    let screenSize = UIScreen.mainScreen().bounds.size

    var rect: CGRect
    if left{
        rect = CGRectMake(-screenSize.width*0.3, 0, screenSize.width*0.3, screenSize.height)
    }else{
        rect = CGRectMake(screenSize.width, 0, screenSize.width*0.3, screenSize.height)
    }

    super.init(frame: rect)
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
    blurView = UIVisualEffectView(effect: blurEffect)
    blurView.frame = CGRectMake(0, 0, self.frame.width, self.frame.height)
    self.addSubview(blurView)
    let vibrancy = UIVibrancyEffect(forBlurEffect: blurEffect)
    vibrancyView = UIVisualEffectView(effect: vibrancy)
    vibrancyView.frame = blurView.frame
    blurView.addSubview(vibrancyView)

    self.userInteractionEnabled …
Run Code Online (Sandbox Code Playgroud)

iphone uiview ios swift uivisualeffectview

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