小编mat*_*way的帖子

通过Git将Master的未提交更改放到新分支

当我在分支机构时,如何将未提交的更改放入分支TEST master

git branch master

188
推荐指数
4
解决办法
5万
查看次数

在哪些情况下我们需要在ARC下编写__autoreleasing所有权限定符?

我正在努力完成这个难题.

__strong是所有Objective-C可保留对象指针的默认值,如NSObject,NSString等.这是一个强大的参考.ARC -release在范围的末尾与a平衡.

__unsafe_unretained等于旧的方式.它用于弱指针而不保留可保留对象.

__weak就像__unsafe_unretained不同之处在于它是一个自动归零弱引用这意味着该指针将零一旦引用的对象被释放被设置为.这消除了悬空指针和EXC_BAD_ACCESS错误的危险.

但到底有什么__autoreleasing好处呢?我很难找到关于何时需要使用此限定符的实际示例.我相信它只适用于期望指针指针的函数和方法,例如:

- (BOOL)save:(NSError**);
Run Code Online (Sandbox Code Playgroud)

要么

NSError *error = nil;
[database save:&error];
Run Code Online (Sandbox Code Playgroud)

在ARC下必须以这种方式声明:

- (BOOL)save:(NSError* __autoreleasing *);
Run Code Online (Sandbox Code Playgroud)

但这太模糊了,我想完全理解为什么.我找到的代码片段将__autoreleasing放在两颗星之间,这对我来说很奇怪.类型是NSError**(一个指针指向NSError),那么为什么要放在__autoreleasing星星之间而不是简单地放在前面NSError**呢?

此外,可能还有其他必须依赖的情况__autoreleasing.

memory-management objective-c ios automatic-ref-counting

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

popViewController的完成块

当使用时解除模态视图控制器时dismissViewController,可以选择提供完成块.是否有相似的等价物popViewController

完成论证非常方便.例如,我可以使用它来阻止从tableview中删除一行,直到模态关闭屏幕,让用户看到行动画.从推出的视图控制器返回时,我想要同样的机会.

我已经尝试放置popViewController一个UIView动画块,我可以访问完成块.但是,这会对弹出的视图产生一些不必要的副作用.

如果没有这样的方法,有什么办法吗?

cocoa-touch uiviewcontroller uiview uiviewanimation ios

105
推荐指数
13
解决办法
5万
查看次数

nib但没有获得UITableView

我的应用程序适用于iOS 5.1,但对于iOS 6模拟器,我收到以下错误.

由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:' - [UITableViewController loadView]加载了"MainListViewController"笔尖,但没有得到UITableView.

我是子类UITableViewController,我不想改变它.

tableview是以编程方式创建的,有一个虚拟MainListViewController.xib加载来自Mainwindow.xibTab Bar Controller.

我也尝试删除MainListViewController.xib,从MainWindow.xibTab Bar Controller中删除它,MainListViewController在AppDelegate中创建它并将其添加到Tab Bar Controller UITabBarItem以摆脱这个nib问题,但我仍然得到同样的错误.

ios ios6

57
推荐指数
5
解决办法
6万
查看次数

UIFont的点大小究竟是什么?

我正在努力准确地理解点大小的UIFont含义.它不是像素,它似乎不是点的标准定义,它们与1/72英寸相关.

我使用-[NSString sizeWithFont:]各种大小的字体计算出像素大小,并得到以下结果:

| Point Size | Pixel Size |
| ---------- | ---------- |
| 10.0       | 13.0       |
| 20.0       | 24.0       |
| 30.0       | 36.0       |
| 40.0       | 47.0       |
| 50.0       | 59.0       |
| 72.0       | 84.0       |
| 99.0       | 115.0      |
| 100.0      | 116.0      |
Run Code Online (Sandbox Code Playgroud)

(我做了[@"A" sizeWithFont:[UIFont systemFontOfSize:theSize]])

并且72.0看点大小,这不是1英寸,因为这是在DPI为163的设备上,所以1英寸将是163.0像素,对吧?

任何人都可以用UIFont术语解释什么是"点" ?即我的方法是错误的,如果我使用别的东西,我会看到有关字体的东西是72点的163像素?或者纯粹是从其他东西定义一个点?

fonts objective-c uikit uifont ios

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

会话到期设计模式

我经常不得不应对在iOS应用程序设计中过期的会话/访问令牌,并且从未真正找到我100%舒适的设计,所以我在这里问这里是否有人能想出更好的设计比我目前使用的.

问题

您有一个使用用户名和密码登录的应用程序.服务器返回一个访问令牌,该令牌应该用于将来对该用户进行身份验证的请求.在将来的某个时间点(未知时间),服务器将使该令牌到期,并且使用该令牌发送的任何请求都将返回身份验证失败.

由于会话过期而导致失败,应用程序应使用原始凭据重新登录并获取新的访问令牌.然后它可以重试原始请求.

因此,假设您有一个API来获取需要身份验证的新闻文章列表.流程可能如下:

  1. 用户登录和应用程序接收令牌.
  2. 视图控制器刷新新闻文章列表.
    1. API请求是使用附加的令牌进行的.
    2. API请求成功并使用新文章更新视图.
  3. 应用已关闭,一段时间过去了.
  4. 应用程序打开,此时视图控制器想要刷新新闻文章列表.
    1. API请求是使用附加的令牌进行的.
    2. API请求失败,因为令牌已过期.
    3. 视图控制器请求刷新令牌并耐心等待.
    4. 刷新令牌后,将重试API请求.

现在想象一下,这是从应用程序中的多个位置完成的.

我目前如何解决它

我通常做的是存储凭证NSUserDefaults(如果我不关心那些凭证的安全性 - 显然更好地使用密钥链)然后在全局管理器对象(单例)上有一个方法,当使用这些凭据刷新登录时我注意到会话已过期.当登录状态发生变化时,此全局管理器会触发通知,以便应用程序的其他部分可以知道何时由于会话过期而应该在失败后重试请求.

我觉得不对劲

好吧,我从来没有喜欢过经理对象的状态机处理.执行请求的每个位置都需要保存一些状态才能知道登录刷新正在进行,并在刷新登录后重试请求.还有一个问题,如果刷新因为密码错误而导致该怎么办(用户可能更改了它) - 你可能不想完全注销并破坏应用程序的所有用户状态,因为你可能只是能够像以前一样要求新密码并继续进行.但是全局管理器并没有真正与UI相关联,因此很难处理要求新登录的UI.

我想在答案中知道什么

我知道这个问题特别模糊和概念化(我仍然认为可以在StackOverflow上工作吗?)但我真的只想知道其他人如何解决这类问题.只是解释您如何处理会话过期,重试来自整个应用程序的失败请求,并在刷新不起作用时向用户询问新凭据.

我想整件事的关键是这个问题:

在何处放置由于会话到期而失败的请求的重试逻辑.我看到这些地方是可选的:

  1. 在视图控制器级别(即保持一个标志,表示我们需要在登录刷新完成后重试最后一个请求).
  2. 在API请求级别(即将API请求封装在知道在刷新登录后重试的对象中).
  3. 在全局登录管理器级别(即refreshLogin,一旦刷新登录,可能会在调用时执行一个块).

authentication ios

36
推荐指数
2
解决办法
5497
查看次数

具有子文件夹的Android资产

InputStream myInput = myContext.getAssets().open("MyFolder/" + "MyFile.db3");
Run Code Online (Sandbox Code Playgroud)

如上所述,我在子文件夹的assets文件夹中有一个文件.它没有获取文件,是否有一种特殊的方法来指定assets文件夹中的子文件夹?

伊恩

android assets

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

iOS异常EXC_GUARD

我在iPhone 4上发生了崩溃,其异常类型为EXC_GUARD.我无法通过谷歌(只有1个结果)或在stackoverflow上找到有关此特定异常的任何信息.它是什么?

Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2012-10-24 14:29:53.740 -0700
OS Version:      iOS 6.0 (10A403)
Report Version:  104

Exception Type:  EXC_GUARD
Exception Codes: 0x0000000100000010, 0x08fd4dbfade2dead
Crashed Thread:  0

Thread 0 name:  MAIN  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x32f25294 close + 8
1   Twine                           0x00230b8e close_file + 10
2   Twine                           0x00218774 -[TFAirTrafficController startSession] + 752
3   Twine                           0x002169fa +[TestFlight takeOff:] + 122
Run Code Online (Sandbox Code Playgroud)

objective-c ios testflight

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

为什么这些简单方法编译方式不同?

我有点困惑为什么clang为以下两种方法发出不同的代码:

@interface ClassA : NSObject
@end

@implementation ClassA
+ (ClassA*)giveMeAnObject1 {
    return [[ClassA alloc] init];
}
+ (id)giveMeAnObject2 {
    return [[ClassA alloc] init];
}
@end
Run Code Online (Sandbox Code Playgroud)

如果我们查看发出的ARMv7,那么我们会在O3启用ARC的情况下看到这个:

        .align  2
        .code   16
        .thumb_func     "+[ClassA giveMeAnObject1]"
"+[ClassA giveMeAnObject1]":
        push    {r7, lr}
        movw    r1, :lower16:(L_OBJC_SELECTOR_REFERENCES_-(LPC0_0+4))
        mov     r7, sp
        movt    r1, :upper16:(L_OBJC_SELECTOR_REFERENCES_-(LPC0_0+4))
        movw    r0, :lower16:(L_OBJC_CLASSLIST_REFERENCES_$_-(LPC0_1+4))
        movt    r0, :upper16:(L_OBJC_CLASSLIST_REFERENCES_$_-(LPC0_1+4))
LPC0_0:
        add     r1, pc
LPC0_1:
        add     r0, pc
        ldr     r1, [r1]
        ldr     r0, [r0]
        blx     _objc_msgSend
        movw    r1, :lower16:(L_OBJC_SELECTOR_REFERENCES_2-(LPC0_2+4))
        movt    r1, :upper16:(L_OBJC_SELECTOR_REFERENCES_2-(LPC0_2+4))
LPC0_2:
        add     r1, …
Run Code Online (Sandbox Code Playgroud)

objective-c clang automatic-ref-counting

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

删除sqlite的WAL文件是否安全?

我在iOS应用程序中有一个奇怪的问题,有时WAL文件变得很大(~1GB).看来还有其他人有问题(例如,当插入~5000行时,Core Data sqlite-wal文件获得MASSIVE(> 7GB)).

我最初的想法是在应用程序启动时删除WAL文件.从阅读关于此事的sqlite文档来看,这似乎没问题.但有人知道这样做的任何缺点吗?

我当然希望深入了解为什么WAL文件增长如此之大,但我现在无法深入了解它并希望在深入研究问题的同时加入解决方案.

值得指出的是,我的Core Data数据库更像是一个缓存.因此,如果我丢失了WAL中的数据并不重要.我真正需要知道的是,如果删除WAL,数据库是否会完全损坏?我的怀疑是否定的,否则WAL不能达到其目的之一.

sqlite core-data ios

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