小编Nic*_*ari的帖子

是否必须调用NSUserDefaults同步方法?

请任何人,帮我:在调用NSUserDefaultssynchronize()方法强制?如果我不打电话,会发生什么?没有它我的应用程序工作正常.

nsuserdefaults ios

13
推荐指数
4
解决办法
6105
查看次数

纹理采样坐标以渲染精灵

假设我们有一个纹理(在这种情况下是8x8像素)我们想要用作精灵表.其中一个子图像(精灵)是纹理内部的4x3子区域,如下图所示:

在此输入图像描述

(显示了四个角的标准化纹理坐标)

现在,基本上有两种方法可以将纹理坐标分配给4px x 3px大小的四边形,以便它有效地成为我们正在寻找的精灵; 第一个也是最直接的是在子区域的角落采样纹理:

在此输入图像描述

// Texture coordinates

GLfloat sMin = (xIndex0                  ) / imageWidth;
GLfloat sMax = (xIndex0 + subregionWidth ) / imageWidth;
GLfloat tMin = (yIndex0                  ) / imageHeight;
GLfloat tMax = (yIndex0 + subregionHeight) / imageHeight;
Run Code Online (Sandbox Code Playgroud)

虽然在第一次实施这种方法时,2010年,我意识到精灵看起来有些"扭曲".经过一些搜索后,我在cocos2d论坛中发现了一个帖子,解释了渲染精灵时采样纹理的"正确方法"是:

在此输入图像描述

// Texture coordinates

GLfloat sMin = (xIndex0                   + 0.5) / imageWidth;
GLfloat sMax = (xIndex0 + subregionWidth  - 0.5) / imageWidth;
GLfloat tMin = (yIndex0                   + 0.5) / imageHeight;
GLfloat tMax = (yIndex0 + subregionHeight - 0.5) / imageHeight; …
Run Code Online (Sandbox Code Playgroud)

textures opengl-es sprite ios ios5

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

Github 中的个人访问令牌不起作用

我的个人 Github 帐户上有一个私人存储库,我有时会使用它,但不是每天使用。

存储库已使用HTTPS不是SSH 或 git://)进行克隆。为了从命令行访问存储库,我设置了一个个人访问令牌,如下所述:https ://help.github.com/articles/creating-a-personal-access-token-for-the-command-线/

确信它当时确实有效(正是因为这种持续性的头痛,我放弃了 SSH)。

然而,当我在几周后尝试推送到我的存储库时,我遇到了可怕的情况:

$ remote: Repository not found. fatal: repository
$ 'https://github.com/nicolas-miari/MyPrivateRepo.git/' not found
Run Code Online (Sandbox Code Playgroud)

我缺少什么?


附录:我删除了 Github 上的令牌,创建了一个新令牌,然后按照此处的说明进行操作:https ://help.github.com/articles/updating-credentials-from-the-osx-keychain/清除存储的旧令牌在钥匙串中。我能够重新克隆我的私人存储库。然而,

  1. 这仍然不能解释为什么之前的访问令牌突然停止工作,并且

  2. 我的钥匙串有两个与主机匹配的“互联网密码”条目github.com:我刚刚删除的访问令牌,以及另一个 Github 帐户(工作)的网络登录密码。也许这有什么关系?

背景信息:为了避免频繁登录/注销,我将工作帐户的 Web 凭据保存在Safari(和钥匙串)中,将个人帐户的 Web 凭据保存在Firefox中。


附录 2:运行链接帮助页面上给出的命令后:

$ git credential-osxkeychain erase
  host=github.com
  protocol=https
  [enter]
Run Code Online (Sandbox Code Playgroud)

...附加密码已从钥匙串中消失(仅保留我新添加的个人令牌),但我仍然可以在 Safari 上登录我的帐户...?


更新:现在我无法从我的工作帐户推送到存储库(我从钥匙串中删除了哪些凭据......)。这个系统确实需要适量的“Just Works” ......

macos command-line github keychain access-token

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

ARC下的Objective-C对象的C风格指针数组

我有一个指向Objective-C实例的2D数组,以跟踪地图网格上的游戏对象.现在我将我的代码转换为ARC,Xcode指出了错误.我知道指向对象的指针不允许作为结构成员,但这个让我(差点)措手不及.

我理解ARC约束背后的基本原理,但是:

  1. 在网格中查找对象时,我无法负担Objective-C数组的开销

  2. 对象本身已经由NSArray同一类中定义的ivar 拥有,该类具有作为ivar的C风格网格; c风格的数组只是一个方便的结构化快捷方式.此外,当从拥有对象中删除对象时NSArray,我将相应的网格槽设置为NULL.

也就是说,2D数组(网格)只是快速(但是愚蠢)指向安全保留在其他地方(NSArrayivar)的对象的集合.

有没有办法摆脱使用演员阵容?例如,将我的网格定义并分配为:

void*** _grid;
Run Code Online (Sandbox Code Playgroud)

代替

MyMapObjectClass*** _grid
Run Code Online (Sandbox Code Playgroud)

在每个插槽中设置或获取指针时,在void*< - > 之间使用(适当桥接)强制转换MyMapObjectClass*

编辑:所以这就是我如何解决它

我如上所述更改了ivar声明.另外,在设置查找网格的条目时,我这样做了:

// (Done **Only Once** at map initialization) 
// _objectArray is an instance of NSMutableArray

MyMapObjectClass* mapObject = [[MyMapObjectClass alloc] init];

// ...configure map object, etc...

// Add to Obj-C array:
[_objectArray addObject:mapObject];

// Add pointer to 2D C array:
_grid[i][j] = (__bridge void*)mapObject;
Run Code Online (Sandbox Code Playgroud)

在(x,y)访问对象时,我做了相反的事情:

MyMapObjectClass* object = (__bridge …
Run Code Online (Sandbox Code Playgroud)

arrays malloc ios automatic-ref-counting

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

关于在Swift中重写类属性的困惑

我已经阅读过Swift文档并在这里进行了搜索,但我仍然不确定如何实现一个类层次结构,其中每个子类为继承的静态属性设置自定义值; 那是:

  1. 基类定义静态属性:所有实例共享相同的值.
  2. 子类重写静态属性:所有实例共享相同的值,这与基类的不同.

该物业可以存储吗?

另外,我应该如何从实例方法中访问属性的值(无论特定的类),并且每次都获得正确的值?以下代码是否有效?

class BaseClass 
{
    // To be overridden by subclasses:
    static var myStaticProperty = "Hello"

    func useTheStaticProperty()
    {
        // Should yield the value of the overridden property
        // when executed on instances of a subclass: 
        let propertyValue = self.dynamicType.myStaticProperty

        // (do something with the value)
    }  
Run Code Online (Sandbox Code Playgroud)

inheritance static properties swift

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

- [EAGLContext renderbufferStorage:fromDrawable:]第二次失败?

我正在开发一个iOS openGL ES应用程序.

我正在做通常的EAGLView/ES2Render.

在启动时,使用以下代码创建frambuffer成功:

- (BOOL) createFramebuffers
{
    [EAGLContext setCurrentContext:_mainContext];

    // [ A ] On-screen  

    // 1. Framebuffer
    glGenFramebuffers(1, &_mainFramebuffer);
    bindFramebuffer(_mainFramebuffer);

    // 2. Color buffer
    glGenRenderbuffers(1, &_mainColorbuffer);
    bindRenderbuffer(_mainColorbuffer);

    // Adjust size to view's layer:
    CAEAGLLayer* layer = (CAEAGLLayer*)[_view layer];

    if (![_mainContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer]) {
        // something went horribly wrong
        NSLog(@"-[ES2Renderer createFramebuffers]: Failed to obtain renderbuffer storage from layer!");
        return NO;
    }

    // Query new size:
    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH,  &_backingWidth);
    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &_backingHeight);

    // Attach to color:
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _mainColorbuffer); …
Run Code Online (Sandbox Code Playgroud)

framebuffer eaglcontext ios opengl-es-2.0

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

如何避免iOS OpenGL ES应用程序自动旋转的瞬间拉伸

这最近一直困扰着我.将一个支持纵向和横向的OpenGL ES应用程序组合在一起非常简单.但是在自动旋转期间,系统似乎只是将渲染缓冲区强制拉伸到新的尺寸一次,自动旋转,然后调用通常的-layoutSubviews- > -resizeFromLayer:等等,这样可以将drawables调整到新的视口尺寸.

我见过的大多数支持肖像和风景的应用似乎都适合这种简单的方法.但我想知道我能不能做得更好......

也许我应该在它发生之前拦截自转(使用UIViewController常规方法),一旦渲染缓冲区"扩展"到最长屏幕尺寸的完美平方(例如,iPhone 5上的1136px x 1136px) - 这样它就会流血'关闭屏幕,执行自动旋转(没有渲染缓冲区尺寸变化,因此没有拉伸,就像在两个横向方向之间切换时一样),最后再次调整帧缓冲区以将不可见的"浪费"边距置于屏幕外?(当然我可以一直有一个方形的帧缓冲,但这样填充效率会很低)

有什么建议?有没有想过的更好的方法来实现这个目标?

编辑

我修改了我的-resizeFromLayer:代码如下:

CGRect bounds = [layer bounds];

// Enlarge layer to square of the longest side:
if (bounds.size.width < bounds.size.height) {
    bounds.size.width = bounds.size.height;
}
else{
    bounds.size.height = bounds.size.width;
}

[layer setBounds:bounds];


// Adjust size to match view's layer:
[_mainContext renderbufferStorage:GL_RENDERBUFFER
                         fromDrawable:(CAEAGLLayer*) [_view layer]];

// Query the new size:
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH,  &_backingWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &_backingHeight);

// (etc., you know the drill...) …
Run Code Online (Sandbox Code Playgroud)

opengl-es aspect-ratio ios auto-rotation

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

在MonoDevelop中更改默认列宽/显示列标尺?

我试图通过改变它的默认列宽标尺改变从120到80我已经接近它Preferences/ Source Code/ Code Formatting/ Text File/ Desired file width:; 但它警告说"本节中所做的更改将仅应用于新项目.可以在项目(或解决方案)选项对话框中修改现有项目的设置".

问题是,我没有项目或解决方案; 我只需要编辑一些松散的脚本我在Unity3D项目中创建:整个"工程"菜单(其中包含两个"项目选项"和"解决方案选项" submenues)是灰色的,因此不可选择.

任何出路?

编辑重新启动后,我的设置似乎已经应用了80个字符......我仍然会接受任何解释偏好动态的答案......

ADDENDUM这适用于Unity版本4.3.3f1附带的MonoDevelop-Unity 4.0.1版.

c# monodevelop

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

标签栏和导航控制器应用程序中的状态恢复

目标:我正在尝试在基于选项卡控制器的应用程序上恢复状态(每个选项卡上都有导航控制器).

问题:重新启动时,所选选项卡似乎按预期还原,但所选选项卡内的导航层次结构不是.

发展:

  1. 我首先开始使用项目模板"基于标签的app".
  2. 接下来,我将恢复ID添加到子视图控制器和标签栏控制器.
  3. 在app委托中,我实现了application(_:shouldSaveApplicationState:)application(_:shouldRestoreApplicationState:).

然后我运行应用程序,切换到第二个(右)选项卡,点击主页,终止.重新启动,显示右侧选项卡(如预期).到现在为止还挺好.

  1. 接下来,我转到故事板并将两个子视图控制器嵌入相应的导航控制器中,并为这些控制器分配恢复ID.

我运行应用程序,恢复仍然有效.还好.

  1. 接下来,我添加一个"细节"视图控制器; 它的类是UIViewController故事板的自定义子类,具有配置调试标签内容及其视图背景颜色的属性.

  2. 我在每个选项卡的顶视图控制器上放置了一个"显示详细信息..."按钮,并从每个选项卡创建一个segue到(共享)详细视图控制器中.所以现在我的故事板看起来像一个六边形(同样,两个segues都有在Interface Builder中设置的标识符).因此,左右顶视图控制器共享相同类型的"细节"视图控制器.在展示中,它被配置为区别于它被推动的位置(参见下一点).

  3. 在每个顶视图控制器的prepareForSegue(_:sender:)方法中,我以不同的方式配置推送的细节视图控制器:不同的文本和背景颜色(分别为"左"和"蓝","右"和红色).

  4. 我将代码添加到详细视图控制器以保存和恢复文本和背景颜色属性的状态:encodeRestorableStateWithCoder(_:)decodeRestorableStateWithCoder(_:).此外,我实现了viewDidLoad()以便在视图中反映这些属性的值.每当它被实例化并通过segue推入导航时,首先设置属性然后用于配置视图viewDidLoad().无论何时在恢复期间实例化,都会设置属性decodeRestorableStateWithCoder(_:)并类似地使用viewDidLoad().

...但是当我运行此代码时,最后选择的选项卡将被恢复,但仅限于顶视图控制器 - 左侧或右侧 - 而不是详细信息.有趣的是,最后设置为细节视图控制器的背景颜色瞬间闪烁.

我放置断点中encodeRestorableStateWithCoder(_:)decodeRestorableStateWithCoder(_:),但只有其中第被执行(编码).

  1. 想知道可能会遗漏什么,我继续实施了app委托application(_:viewControllerWithRestorationIdentifierPath:coder:)(总是返回nil,但是记录了传递的路径组件).

关于是否需要这种方法的文档不是很清楚,并且在任何情况下,除了细节之外的所有视图控制器似乎都可以完美地恢复,即使没有它.我添加了代码,根据最后一个路径组件(即该控制器的恢复ID)实例化每个视图控制器并返回它.

现在,它decodeRestorableStateWithCoder(_:) 调用,但导航仍然会在瞬间返回到选项卡的顶视图控制器.

那么发生了什么?在Tab栏+导航控制器应用程序中实现状态保存和恢复我缺少什么?

ios uistoryboard uikit-state-preservation ios9

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

用迦太基嵌套我自己的框架

我试图在两个框架和一个应用程序之间实现以下依赖关系设置时遇到问题,这些都是由我开发的:

在此输入图像描述

  1. UTIL containts一堆的低级别的实用程序和扩展Foundation类型,例如String,Date

  2. UI,包含了一些定制UIViewUIViewController子类,类扩展UIColor,UIImage等等.

应用程序和每个框架在GitHub上都有自己的存储库.


UI框架建立依赖于的Util框架,采用迦太基:

  1. 项目的Cartfile包含对Util回购的引用:

    github "MyOrganization/Util.git"

  2. Util列在"链接框架和库"中,但未嵌入(因为UI框架项目,而不是应用程序).

  3. 框架搜索路径构建设置中包含$(PROJECT_DIR)/Carthage/Build/iOS$(inherited)

  4. .gitignore文件配置为忽略整个Carthage目录(不仅仅是/Build)

  5. 没有使用git子模块,我不打算(我已经有足够的头痛).


如果我克隆UI框架并运行carthage update,Carthage会获取/构建Util,我可以手动嵌入它来构建UI框架.

到现在为止还挺好.


但是如果我克隆App框架并运行carthage update,Carthage会获取UI repo,但它无法构建:

  1. 该目录App/Carthage/Checkouts包含UI项目的签出副本,如预期的那样.但是,嵌套框架没有进一步的Carthage目录(我认为它应该是App/Carthage/Checkouts/UI/Carhage/Checkout/Util).

  2. 导航到App/Carthage/Checkouts/UI使用Xcode打开工作区并显示它也很明显.引用Util.framework被打破了.

从我所读到的,迦太基应该获取递归依赖; 我在这里错过了什么? …

xcode dependency-management ios carthage

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