小编Jef*_*eff的帖子

复制NSDate(想要独立的对象)

NSDate符合NSCopying协议.根据NSCopying协议的文档:

a copy must be a functionally independent object with values identical
to the original at the time the copy was made.
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时:

NSDate *date1 = [NSDate date];
NSDate *date2 = [date1 copy];
NSLog(@"result: date1 0x%x  date2 0x%x", (int)date1, (int)date2);
// "result: date1 0x2facb0  date2 0x2facb0"
Run Code Online (Sandbox Code Playgroud)

这两个对象是相同的(相同的对象id).我错过了什么?如何将独立对象作为副本?

objective-c nsdate

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

Xcode 8,不能配对手表模拟器

我正在运行Xcode 8 beta 5.我的应用程序有一个手表扩展.我无法将iPhone模拟器与手表模拟器配对.我已按照配对说明(Xcode,Window,Devices)但没有列出手表模拟器,当我选择任何iPhone模拟器时也没有列出.我尝试过添加模拟器的变体,但我只获得了更多的iPhone模拟器 - 我从未看过手表模拟器或配对.手表模拟器存在 - 我可以启动模拟器,但它没有配对.我试过删除Xcode并重新安装.与beta 4相同的问题.

当我在设备中选择iPhone模拟器时,如何让手表模拟器出现?

更新:要清楚,这些是Apple关于"将Apple Watch Simulator与iPhone模拟器配对"的说明(https://developer.apple.com/library/ios/recipes/xcode_help-devices_organizer/PairingWatchestoiPhoneSimulators/PairingWatchestoiPhoneSimulators.html)

  1. 在Simulators下的Devices窗口中,选择iPhone 5及更高版本的模拟器.

  2. 在Paired Watches表下,单击Add按钮(+).

我从未看过"配对手表",因此没有添加按钮.

我确实在Xcode 7中看到了这样的: 配对观看桌(Xcode 7) 更新2: 在Xcode 8 beta 6中,"配对手表"表出现在"设备"窗口中,但配对仍然失败,并且"模拟器未配对"对话框.

xcode ios ios-simulator apple-watch xcode8

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

强制Xcode 4将XIB编译为NIB

我将具有三个目标的Xcode 3项目升级到Xcode 4.我的目标的捆绑包不再有任何NIB文件 - 只有XIB文件.一个新的Xcode 4项目都有(至少在模拟器中).我没有看到旧的和新的Xcode项目的设置之间有任何区别来解释这种差异.

如何让Xcode 4编译XIB文件并将NIB放入我的包中?

iphone xib nib xcode4

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

va_args()导致EXC_BAD_ACCESS

我在使用va_args(iOS 7,Xcode 5.1.1,ARC on)时获得了EXC_BAD_ACCESS:

    // ...
    int val = sqlIntQuery(@"format_string", @"arg1"); // <-- does not work
    int val = sqlIntQuery(@"format_string", @"arg1", nil); // <-- this works
    // ...

- (int)sqlIntQuery:(NSString *)format, ...
{
    va_list args;
    va_start(args,format);
    __unsafe_unretained id eachObject;
    NSMutableArray *arguments = [NSMutableArray array];
    while ( (eachObject = va_arg(args, id)) != nil ) { // <-- crash on 2nd loop
        [arguments addObject:eachObject];
    }
    va_end(args);

    // ... process 'arguments'

    return 5; // return a computed intValue
}
Run Code Online (Sandbox Code Playgroud)

如果我说"休息" 在循环结束时(因为我只有一个参数),或者添加"nil"作为最后一个参数,没有崩溃,但我认为我不应该添加"nil".我怀疑是ARC问题,但我正在使用__unsafe_unretained,正如其他地方所建议的那样.(有没有办法可以将"nil"推入args?)

是什么导致第二次通过循环失败?


编辑8月6日:我的解决方案: …

sqlite objective-c variadic-functions fmdb ios

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

关于 SKStoreReviewController requestReview 版本限制的困惑

在 www.raywenderlich.com App Store Review 教程Requesting App Ratings and Reviews Tutorial for iOS中,作者 (Sanket Firodiya) 表示 Apple 实施了某些限制:

  1. 每年限制3次,
  2. 不保证会显示提示,并且
  3. “系统不得显示与当前捆绑包版本匹配的应用程序捆绑包版本的提示。这可以确保用户不会被要求多次查看同一版本的应用程序。”

我正在写关于第三个限制的文章。该教程似乎说 Apple 强制执行该版本限制,但教程的示例代码也执行了该强制操作(Apple 的示例代码也是如此)。我相信在调用之前进行版本测试requestReview很容易导致没有评级请求。正如我在下面解释的那样,如果苹果公司进行了这项测试会更好,但是他们这样做了吗?

细节:

请求应用程序商店评论中,Apple 表示我们应该对[SKStoreReviewController requestReview]每个应用程序版本只执行一次,并且 Apple 的示例代码在调用之前包含版本测试requestReview。此外,我们还被告知,requestReview对话框的出现次数每年不得超过 3 次。因此,如果特定的调用requestReview导致没有对话框,则将不再有调用requestReview(直到版本更改),因此该版本绝对不会有评级对话框。当版本更改时,似乎不太可能出现审阅对话框(除非第一次调用显示requestReview对话框)。

这很令人困惑。由于 Calling 的版本限制requestReview,每年 3 次的限制似乎毫无用处,或者至少是过度的。由于这两个相互冲突的限制,即使发布了新版本,用户也可能永远不会看到审阅对话框。但是,我知道事实并非如此。所以,我相信苹果测试当前版本的示例代码是不正确的。苹果强制实施这一限制更有意义,因为他们知道是否出现对话框。

如果API返回一个布尔值来指示对话框是否出现,那么只有对话框出现时我们才能保存版本号。我想知道Apple是否在SDK中这样做了。

我了解苹果关于何时发出请求的其他建议,例如等待用户参与、不中断活动等。这个问题仅涉及与应用程序版本有关的限制。

我是否应该实施版本限制?如果我进行该测试,我怎么能期望出现一个对话框呢?也许,第一次调用requestReview总是会导致审核对话框(如果不是一年内的第三次调用)——是吗?

顺便说一句,我不是第一个有这种担忧的人。请参阅forums.raywenderlich.com

杰夫

storekit ios skstorereviewcontroller

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

Xcode 项目显示两个 git 存储库(只有一个是正确的);提交到两个

我是 git 新手。所以,我很困惑,可能没有使用正确的术语。

我有两个独立的 Xcode 项目,每个项目都有自己的本地存储库。尽管这些项目具有相似的名称,但每个项目都有单独且不同的源文件。我已经对每个项目进行了几次提交,但是当我在一个项目中提交时,该提交会同时显示在两个项目中。我的新项目在 git 导航器中显示了两个项目(这可能与问题有关)。当我进行新的提交时,旧项目未在 Xcode 中打开。

每个项目都有自己的 .git 文件夹。

细节:

旧项目 1(“调度程序”):显示一个存储库,但我在新项目中所做的最后一次提交出现在那里。

显示 Scheduler 项目的 XCode UI

新项目 2(“Scheduler6”):显示两个存储库,我在那里所做的最后一次提交都显示在这两个存储库中。

显示 Scheduler 和 Scheduler6 项目的 XCode UI

为什么项目 2 显示两个存储库,这就是我的提交最终出现在两个存储库中的原因吗?如何纠正?这种情况以前发生过,我在旧存储库中执行了“git reset HEAD^”以删除不正确的提交。我想永远停止这种行为。(我对于在终端中使用 git 命令犹豫不决。)

git xcode

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

Xcode 断点是否在“存档”构建中启用?

我一直在(Zombie、malloc_error_break、所有 Obj-C 异常、所有异常)上使用断点进行测试。当我为 iOS App Store 进行发布/分发构建时,我忘记关闭它们。这是一个问题吗?(Xcode 5、iOS)

xcode breakpoints

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

objc_setAssociatedObject保留原子或非原子

当我使用时objc_setAssociatedObject,我知道是使用保留还是分配,但我不知道如何在OBJC_ASSOCIATION_RETAIN和之间做出决定OBJC_ASSOCIATION_RETAIN_NONATOMIC.何时应该使用其中一种?

objective-c objective-c-runtime ios

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