小编joe*_*oey的帖子

类型“Bundle”没有成员“模块”

我已经尝试过这个问题的解决方案:生成resource_bundle_accessor,类型“Bundle”没有成员“模块”,但它仍然不起作用。

我正在尝试在单元测试中访问一个简单的 JSON 文件。这是我的 Package.swift:

// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "MyLibrary",
    platforms: [.iOS("11.0"), .macOS(SupportedPlatform.MacOSVersion.v10_12)],
    products: [
        .library(name: "MyLibrary", targets: ["MyLibrary"])], 
    dependencies: [],
    targets: [
        .target(name: "MyLibrary", dependencies: []),
        .testTarget(
            name: "MyLibraryTests",
            resources: [
                .process("recommendations.json"
            ],
            dependencies: ["MyLibrary"]
        ),
    ]
)
Run Code Online (Sandbox Code Playgroud)
  • 我正在使用 swift-tools 5.3
  • 我已将其添加recommendations.json到我的 package.swift 中。

我已经关闭并重新打开 Xcode 5 次,但仍然没有创建扩展Bundle.module。这是我的文件结构:

在此输入图像描述

如何在单元测试中访问我的 JSON 文件?

swift swift-package-manager

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

使用委托将数据从一个TableView传输到另一个

我需要tableview通过单击内的按钮将字符串从一个字符串传输到另一个字符串UITableView。我知道如何indexPath通过按钮获取通行符,如下所示:

    let button = sender as MyButton
    let view = button.superview!
    let cell = view.superview as! MyTableViewCell

    let indexPath = tableView.indexPathForCell(cell)
Run Code Online (Sandbox Code Playgroud)

上面的代码可以在单击按钮时获取单元格的索引路径,但是为了传输数据,我必须使用prepareForSegue。因此,我自然会尝试使用segue进行准备并更改senderfrom AnyObject?至MyButton

然后,我收到一条错误消息,提示“ 使用选择器prepareforsegue的重写方法具有不兼容的type”

delegates迅速搜索并了解了这些内容以及它们如何提供帮助,并在此处尝试了MakeAppPie给出的答案:

代表们迅速?但这对我没有用。

有什么方法可以将segue的准备工作与上面的代码结合起来吗?我尝试了此操作,但是它导致了我上面刚刚提到的错误消息:

      override func prepareForSegue(segue: UIStoryboardSegue, sender: MyButton)  {

      let myVC = segue.destinationViewController as? CommentsViewController


                   let usender:AnyObject = sender!
                    let button = usender as? MyButton
                    let view = button.superview!
                    myVC!.title = button.titleForState(.Normal)

                    let cell = view.superview as! QuestionCell …
Run Code Online (Sandbox Code Playgroud)

xcode delegates uitableview ios swift

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

苹果指南14.3“阻止滥用用户的能力”

完整规则如下:

Apps that display user generated content must include a method for
filtering objectionable material, a mechanism for users to flag 
offensive content, and the ability to block abusive users from the service
Run Code Online (Sandbox Code Playgroud)

我的应用程序确实包含用户生成的内容。我有一个功能,如果用户发现有异议,则可以标记用户。发生这种情况时,我会在数据库中收到通知,我个人判断是否应删除内容。但是,没有使用户能够直接阻止另一个用户的功能。我的应用程序中没有“关注”或“好友请求”,它更像是一个公共论坛,您可以在其中阅读其他人的内容并可以发布自己的内容,但不能直接关注其他人。

我阻止其他人使用该服务的方法是从数据库中删除用户帐户及其关联的帖子。我够了吗?我发现指南中的措词有点含糊不清。

appstore-approval ios

5
推荐指数
2
解决办法
2786
查看次数

在uitableview单元中播放视频

我正在尝试设置一个可以播放视频的UITableView。许多在此使用MPMoviePlayer(以前做题播放视频到UITableView的在SWIFT播放视频的UITableView播放视频从UITableView的),现在已不建议在iOS版9为数不多的以使用过AVFoundation(什么我使用),是这样的:当UITableViewCell完全可见并且是我从中获取大部分代码的地方时,播放视频。这是我的代码,位于cellForRowAtIndexPath内部:

 VideoCell *videoCell = (VideoCell *)[self.tableView dequeueReusableCellWithIdentifier:@"VideoCell"];

        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
        NSURL *url = [[NSURL alloc] initWithString:urlString];

        dispatch_async(queue, ^{
        videoCell.item = [AVPlayerItem playerItemWithURL:url];

            dispatch_sync(dispatch_get_main_queue(), ^{
                videoCell.player = [[AVPlayer alloc] initWithPlayerItem:videoCell.item];
                videoCell.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;

                AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:videoCell.player];
                playerLayer.frame = CGRectMake(0, 0, videoCell.contentView.frame.size.width, videoCell.contentView.frame.size.height);
                [videoCell.contentView.layer addSublayer:playerLayer];
                playerLayer.videoGravity = AVLayerVideoGravityResize;
                [videoCell.player play];

            });
        });


        return videoCell;
Run Code Online (Sandbox Code Playgroud)

据我了解,在播放视频之前,我需要异步下载视频。我以前异步下载图像,其中的“下载”部分始终涉及转换NSURL-> NSData-> UIImage。然后,当您拥有UIImage时,就可以在单元格中显示它了,因此可以调出主队列和dispatch_async并执行单元格。在主队列上。

在这里,我有一个NSURL,但是我不太明白这里的哪些步骤应该在主队列中,哪些应该不在主线程中。我尝试了前面提到的SO问题中提出的建议,但到目前为止它没有用。表格单元格刚刚加载,视频从不播放。我只看到第一帧。有时它的前1秒会播放,但随后会缓冲,不会播放。我正在使用一个只有1个对象的表视图,因此只有1个视频要播放,但仍然没有播放。

我在做什么错,有人可以帮助我确切说明哪些部分需要在主线程上,哪些需要关闭?我在顶部提到的线程中的响应者说,“那里有很多教程”,但是在扫描google时我没有看到任何内容。“异步”和“ iOS”这两个词几乎总是会获得有关图片下载而非视频的搜索结果。但是,如果有任何教程,那么很高兴看到它。

谢谢

avfoundation uitableview ios

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

Rails/Stripe:没有这样的令牌

我正在尝试使用 Rails 在 Stripe 中创建一次一次性充电。我收到以下错误:

在此处输入图片说明

Stripe::InvalidRequestError (No such token: tok_18nnwSJ6tVEvTdcVs3dNIhGs)
Run Code Online (Sandbox Code Playgroud)

但是,从照片中可以清楚地看出,令牌在参数中。该令牌来自 Stripe.js。

这是我的控制器中的代码:

  Stripe.api_key = "xxxxxxxxxxx"
  customer = Stripe::Customer.create(source: params[:stripeToken])
  charge = Stripe::Charge.create({
  :amount => 10000, 
  :currency => "usd",
  :customer => customer.id,
  :description => "Example charge"
})
Run Code Online (Sandbox Code Playgroud)

我也试过:

  Stripe.api_key = "xxxxxxxxxxx"
  charge = Stripe::Charge.create({
  :amount => 10000, 
  :currency => "usd",
  :source => params[:stripeToken],
  :description => "Example charge"
})
Run Code Online (Sandbox Code Playgroud)

这也行不通。所有这些都很简单,直接来自 Stripe 站点的样板代码,知道我做错了什么吗?我对 Stripe 嵌入表单没有任何问题。

ruby-on-rails

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

MPMusicPlayerController并使用Private API获取当前队列

这个问题有一个答案:iOS - 以编程方式获取当前播放的项目队列,描述如何执行此操作,但是我正在尝试该方法,但它不起作用.这是我的代码:

  let numberOfItems = player.value(forKey: "numberOfItems") as! Int
  for i in 0..<numberOfItems {

    if let mediaItem = MPMusicPlayerController.systemMusicPlayer.perform(Selector("nowPlayingItemAtIndex:"), with: i)?.takeUnretainedValue() as? MPMediaItem {
            let songObject = mediaItem.value(forKey: "propertyValues") as! NSObject
            print(songObject.value(forKey: "title"))
            print(mediaItem.title)
            print(mediaItem.value(forKey: "title"))
            print(mediaItem.value(forProperty: MPMediaItemPropertyTitle))
        }
    }
Run Code Online (Sandbox Code Playgroud)

所有4个打印报表都是零.值得注意的是,它确实可以将项目转换为MPMediaItem,而songObject变量实际上是作为MPModelSong打印的.运行时标头指示MPModelSong对象"title"上有一个属性(可在此处找到:https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/MediaPlayer.framework/MPModelSong.h)

无论如何,一切都打印为零.知道我应该从这里走向什么方向?

ios swift

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

试图使导航栏清晰,它是黑色的

我在UINavigationController中.UINavigationController有3个视图控制器.前两个是tableViewControllers,最后一个是常规视图控制器,嵌入了PageViewController.

我在堆栈的第三个视图控制器中使用以下代码来清除UINavigationBar:

navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
Run Code Online (Sandbox Code Playgroud)

我把这段代码放在堆栈的第三个视图控制器中.这是嵌入了UIPageViewController的视图控制器.但导航栏是黑色的.但是,当我从堆栈中弹出第三个控制器并返回到第二个控制器UITableViewController时,导航栏就清晰了.

我在这里看了很多其他问题:如何在iOS 7和这里制作完全透明的导航栏:Swift中的透明UINavigationBar但没有任何作用.

我究竟做错了什么?上面的两行代码是我正在使用的唯一代码,但我也尝试过上面链接中的建议,但没有任何作用.这是黑色导航栏的照片:

在此输入图像描述

ios swift

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

在iOS中压缩视频

我看过这个问题这个问题,但都没能提供帮助.

我尝试过以下方法:

- (void)compress:(NSURL *)videoPath completionBlock:(void(^)(id data, BOOL result))block{
    self.outputFilePath = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"output.mov"];
    NSURL *outputURL = [NSURL fileURLWithPath:self.outputFilePath];
    [self compressVideoWithURL:self.movieURL outputURL:outputURL handler:^(AVAssetExportSession *exportSession) {

    }];
}

- (void)compressVideoWithURL:(NSURL*)inputURL
                   outputURL:(NSURL*)outputURL
                     handler:(void (^)(AVAssetExportSession*))handler {

    AVURLAsset *asset = [AVURLAsset assetWithURL:self.movieURL];
    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetLowQuality];
    exportSession.fileLengthLimit = 3000000;
    exportSession.outputURL = outputURL;
    exportSession.outputFileType = AVFileTypeQuickTimeMovie;
    exportSession.shouldOptimizeForNetworkUse = YES;
    [exportSession exportAsynchronouslyWithCompletionHandler:^{
        NSData *newOutputData = [NSData dataWithContentsOfURL:outputURL];
        NSLog(@"Size of New Video(bytes):%d",[newOutputData length]);
    }];
}
Run Code Online (Sandbox Code Playgroud)

我知道self.movieUrl不是 …

avfoundation ios

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

检查数组中的字典对象是否包含javascript中的特定值

我有一个数组,如下所示:

 const myArray = [{key1: "value1", key2: "value2"}, {key1: "value4", key2: "value8"},
  {key1: "value1", key2: "value3"}, {key1: "value1", key2: "value32"}]
Run Code Online (Sandbox Code Playgroud)

我需要遍历数组,并查看数组中的任何项目是否具有特定值。我查看了其他问题,大多数循环并创建变量,但是我不允许使用 var(ES6 的东西,我是一个 js 菜鸟并且不确定,只是被告知永远不要使用 var,始终是 const)。基本上我需要这样的东西:

if (myArray.contains(object where key1=="value2")) {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

我希望函数也返回真/假,而不是对象本身。

谢谢

javascript

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

addArc(withCenter) 闭合路径

以下代码:

  let size = CGSize(width: 200, height: 30)
  let rect = CGRect(origin: .zero, size: size)

  let path1 = UIBezierPath()
  path1.move(to: CGPoint(x: 10, y: 5))
  path1.addLine(to: CGPoint(x: 180, y: 5))
  path1.addArc(withCenter: CGPoint(x: 180, y: 20), radius: 15, 
    startAngle: (3.14159 / 2), endAngle: (3 * 3.14159 / 2), clockwise: false)
Run Code Online (Sandbox Code Playgroud)

产生这个:

在此处输入图片说明

好吧,我错过了什么吗?我不想关闭这条路。我从不打电话path1.close()。我想从弧的末端添加另一条直线,而不是从它的封闭版本。基本上,我不想关闭半圆,我该怎么做?

ios uibezierpath swift3

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