小编Ben*_*ous的帖子

"未解决的导入 - 可能是一个缺失的外部"当外部声明存在时

我有一个小项目,当它在一个大的.rs文件中时没有问题.我想让它更容易使用,所以我把它分解成模块,现在项目的结构如下:

??? GameState
?   ??? ballstate.rs
?   ??? collidable.rs
?   ??? gamestate.rs
?   ??? mod.rs
?   ??? playerstate.rs
??? lib.rs
??? main.rs
Run Code Online (Sandbox Code Playgroud)

ballstate.rs,我需要使用rand箱子.这是文件的缩写版本:

extern crate rand;

pub struct BallState {
    dir: Point,         
    frame: BoundingBox  
}                     

impl BallState {
    fn update_dir(&mut self) {
        use rand::*;                                                                                                                                                                    
        let mut rng = rand::thread_rng();                                                                      
        self.dir.x = if rng.gen() { Direction::Forwards.as_float() } else { Direction::Backwards.as_float()  };
        self.dir.y = if rng.gen()  { Direction::Forwards.as_float() } else { Direction::Backwards.as_float() };
    }                                                                                                        
}
Run Code Online (Sandbox Code Playgroud)

但是,当我cargo build …

rust rust-cargo

14
推荐指数
1
解决办法
8489
查看次数

将文件从本地文件系统加载到从file:// URL提供的WKWebView网站

如果我在这个问题中遗漏了任何相关信息,请提前道歉:我不是网络开发人员,所以我不确定究竟需要哪些信息来解决我的问题.

我有一个WKWebView加载一个本地服务的网站,使用大致相似的代码(省略了一些涉及管理器的细节,我认为这与此问题无关).

  WKWebViewConfiguration *webViewConfiguration = [[WKWebViewConfiguration alloc] init];
  WebViewManager *manager = [[WebViewManager alloc] init];
  webViewConfiguration.userContentController = manager;
  WKWebView *aWebView = [[WKWebView alloc] initWithFrame:self.view.bounds
                                           configuration:webViewConfiguration];
  [aWebView loadRequest:[NSURLRequest requestWithURL:aUrl]];
  [aWebView setNavigationDelegate:manager];
Run Code Online (Sandbox Code Playgroud)

该网站的HTML文件存储在App的捆绑包(file://URL)中,并且需要能够访问存储在捆绑包中相同目录中的各种图像,CSS文件,JS文件和其他资源(有亲戚)我相信HTML中的URL用于此目的.

我现在需要能够从App的共享容器中提供图像(通过containerURLForSecurityApplicationGroupIdentifier:方法访问NSFileManager).

但是,我提供的URL不起作用.当我在Safari调试器中查看页面时,我看到一些涉及加载文件的jQuery代码中引发异常.

我已经调查了一些可能的解决方法,但没有一个解决了我的问题:

loadFileURL:allowingReadAccessToURL:方法似乎正是我所需要的,但是,将readAccessURL参数设置到我的共享安全容器中的文件夹打破了网站 - 实际上,它甚至看起来不像HTML文件本身正确加载,因为它们都没有Safari调试程序中的正确名称.作为测试,我将URL设置为包含HTML页面的目录包中的URL,并得到了不同的错误.

另一位开发人员建议我们将每个图像从包外转换为base64编码的字符串,并通过Javascript将其传递到网站,但这对我来说似乎非常低效,所以我希望避免这种结果.

最后,我在其他地方读过,将文件复制到tmp/www应用程序目录中可以解决iOS 8上类似的问题.所以我想知道是否将所有内容复制到同一个目录(在bundle之外,当然是只读的)可能会解决这个问题.然而,这似乎也非常低效.

如何将包内和共享应用程序容器中的文件加载到我的Web视图中?

ios wkwebview

13
推荐指数
0
解决办法
2338
查看次数

子项目中的Cocoapods

我有一个子项目的项目.子项目和主项目都必须使用Cocoapods来集成一个看似不可能在没有Cocoapods的情况下集成的库.所以我为主项目及其子项目设置了Cocoapods.子项目在其生成的工作空间中构建,但编译主项目会产生以下错误:ld:找不到-lPods-Subproject name-Library的库.

我现在唯一的想法是,我应该以某种方式让子项目的Cocoapods回购使用主项目的名称,这样当子项目构建时,它将检查与主要项目的Cocoapods生成相同的库(可能是-lPods-Main Project) Name-Library),它将作为主项目构建过程的一部分创建.

我怎样才能做到这一点?有没有更好的方法来获得我想要的结果?

cocoapods

7
推荐指数
1
解决办法
2945
查看次数

如何将参数中的值移到Drop :: drop()?

我正在使用gfx-hal,这需要我创建需要使用特定于其类型的函数显式销毁的资源.我想将这些类型的实例存储在结构中,并且我还希望将它们清理到拥有结构的生命周期,而不是手动管理它们的生命周期并且可能在GPU上/驱动程序中有对象永远.

但是,函数destroy族中的所有函数都直接使用类型而不是引用,所以当我尝试从结构中传递它们时,会出现如下错误:

error[E0509]: cannot move out of type `S`, which implements the `Drop` trait
 --> src/lib.rs:9:18
  |
9 |         destroyT(self.member)
  |                  ^^^^^^^^^^^ cannot move out of here
Run Code Online (Sandbox Code Playgroud)

似乎应该有一些解决这个问题的方法,因为我目前处于Drop::drop函数本身,因此self已经"消耗"了.我如何获得这些类型的实例出来selfT,而不是&T

struct T;

struct S {
    member: T,
}

impl Drop for S {
    fn drop(&mut self) {
        destroyT(self.member)
    }
}

// elsewhere, in a library

fn destroyT(t: T) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

rust

7
推荐指数
2
解决办法
185
查看次数

玩家:receivedTurnEventForMatch:didBecomeActive:不一致/很少发生火灾

我目前正在使用Game Center Sandbox测试我的Game Center Aware App,其中一个实例在iOS模拟器上运行,另一个在Retina iPad Mini上运行.我有一个需要接收转弯事件的视图控制器,所以我实现了该方法

player:receivedTurnEventForMatch:didBecomeActive:
Run Code Online (Sandbox Code Playgroud)

在我的UIViewController子类采用的GKLocalPlayerListener协议中,然后使用此行注册事件

[[GKLocalPlayer localPlayer] registerListener: self];
Run Code Online (Sandbox Code Playgroud)

在视图控制器的init方法中.然而,尽管游戏中心应用程序说游戏的两个实例已连接,但这种方法很少在iPad上调用,我不认为我曾经见过模拟器实例调用它.但是,转到Game Center App会显示两个实例都已更新,表明两个实例都能够接收事件.可能是什么导致了这个?

objective-c ios game-center gkturnbasedmatch

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

__cxa_throw in fontWithName:size:

我有一个功能,可以在iOS 8.3上获得Helvetica Neue字体(尽管我自8.0以来遇到了同样的问题).

static UIFont *helveticaNeue() {
  return [UIFont fontWithName:@"HelveticaNeue"
                     size:[UIDevice currentDevice].userInterfaceIdiom  == UIUserInterfaceIdiomPad ? 30 : 24];
}
Run Code Online (Sandbox Code Playgroud)

这个函数实际上运行得很好,但是第一次调用它时,调试器会停止,在此函数之后的callstack看起来像__objc_msgSend_uncached_impcache- > __cxa_throw.

从我读过的其他一些问题来看,这个例外是无害的.然而,每次击中时都必须继续击打,真的很烦人.

我已经尝试了各种同义UIFont函数来尝试获取Helvetica Neue UIFont对象,或者将其作为类或实例方法,并且所有这些都抛出此异常.

我已经读过,我可以通过将我的All Exceptions Breakpoint更改为Objective-C异常来阻止这种情况,但是我不想这样做,因为这个项目包含大量的C++代码,而且似乎这样会阻止此代码中的异常中断.

有谁知道如何防止抛出异常,或者如何忽略这一个特定的异常?

objective-c uikit uifont

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

if语句导致类型错误elm

我想更新Elm类型的记录

type CubeData = {currDirection : Vec3, translation : Vec3, transform : Mat4}
Run Code Online (Sandbox Code Playgroud)

我可以使用以下代码来做.

updateCubeData : CubeData -> CubeData
updateCubeData cubeData = {cubeData | translation <- cubeData.currDirection,
                                      transform <- translate cubeData.translation cubeData.transform}
Run Code Online (Sandbox Code Playgroud)

但是,我现在想要根据字段的当前值不同地更新记录的字段,所以我尝试这样做

 updateCubeData : CubeData -> CubeData
 updateCubeData cubeData = if abs cubeData.translation.x > 2.0 || abs cubeData.translation.y > 2.0
                           then  {cubeData | translation <- cubeData.currDirection,
                                             transform <- translate cubeData.translation cubeData.transform}
                           else  {cubeData | currDirection <- negate cubeData.currDirection,
                                             translation <- cubeData.currDirection,
                                             transform <- translate cubeData.translation cubeData.transform}
Run Code Online (Sandbox Code Playgroud)

这是一个类型错误,我在下面转载.请注意,类型签名updateCubeData是文件的第12行. …

elm

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

是不是在init方法中调用[super init]是否正确?

在Microsoft的WinObjC UIApplication.mm文件(https://github.com/Microsoft/WinObjC/blob/master/Frameworks/UIKit/UIApplication.mm)中,该init方法适用于UIApplicationWOCDisplayMode.

类的init方法调用[super init],或者最终导致调用的那个方法系列中的任何方法都没有[super init].除了NSProxy对象的初始化之外,我以前从未见过这个.

我在WOCDisplayMode下面的写作中复制了实现,以供参考.

-(instancetype) init
{
    _fixedWidth = 320.0f;
    _fixedHeight = 480.0f;
    _fixedAspectRatio = 0.0f;
    _magnification = 1.0f;
    _autoMagnification = TRUE;
    _sizeUIWindowToFit = TRUE;
    _operationMode = WOCOperationModePhone;
    return self;
}
Run Code Online (Sandbox Code Playgroud)

在我看来,这可能会产生一些问题; 例如,如果其中某个超UIApplication一样UIResponder,在某些时候推翻init自己,并建立未来的方法调用依赖于内部状态.

为什么执行者选择不打电话[super init]?这是否是一个合理的决定?这是正确的吗?

objective-c winobjc

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

在模式匹配时修改结构的字段

在我的代码中,我有一个结构,用于在HashMap中为用户存储消息messages.在&mut self作为争论的函数内部,当我为用户找到消息时,我想修改此字段的值以删除这些消息,以便用户不会两次获得相同的消息.但是,我得到的错误是我无法借用self作为可变因为我在模式匹配开始时将它借用为不可变的.

match self.messages.find(&username) {
             Some(message_array) => {
               //do some stuff to send the messages
               self.messages.remove(&username);
             },
Run Code Online (Sandbox Code Playgroud)

我发现这个问题修改了一个字段,同时模式匹配,但是它接受的答案似乎没有解决我的问题 - 我不明白这条线&Tokenizer { state: InATag(*) } => { self.state = Outside }是如何让自己再次变异的.

rust

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