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).我错过了什么?如何将独立对象作为副本?
我正在运行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)
在Simulators下的Devices窗口中,选择iPhone 5及更高版本的模拟器.
在Paired Watches表下,单击Add按钮(+).
我从未看过"配对手表",因此没有添加按钮.
我确实在Xcode 7中看到了这样的:
更新2:
在Xcode 8 beta 6中,"配对手表"表出现在"设备"窗口中,但配对仍然失败,并且"模拟器未配对"对话框.
我将具有三个目标的Xcode 3项目升级到Xcode 4.我的目标的捆绑包不再有任何NIB文件 - 只有XIB文件.一个新的Xcode 4项目都有(至少在模拟器中).我没有看到旧的和新的Xcode项目的设置之间有任何区别来解释这种差异.
如何让Xcode 4编译XIB文件并将NIB放入我的包中?
我在使用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日:我的解决方案: …
在 www.raywenderlich.com App Store Review 教程Requesting App Ratings and Reviews Tutorial for iOS中,作者 (Sanket Firodiya) 表示 Apple 实施了某些限制:
我正在写关于第三个限制的文章。该教程似乎说 Apple 强制执行该版本限制,但教程的示例代码也执行了该强制操作(Apple 的示例代码也是如此)。我相信在调用之前进行版本测试requestReview很容易导致没有评级请求。正如我在下面解释的那样,如果苹果公司进行了这项测试会更好,但是他们这样做了吗?
细节:
在请求应用程序商店评论中,Apple 表示我们应该对[SKStoreReviewController requestReview]每个应用程序版本只执行一次,并且 Apple 的示例代码在调用之前包含版本测试requestReview。此外,我们还被告知,requestReview对话框的出现次数每年不得超过 3 次。因此,如果特定的调用requestReview导致没有对话框,则将不再有调用requestReview(直到版本更改),因此该版本绝对不会有评级对话框。当版本更改时,似乎不太可能出现审阅对话框(除非第一次调用显示requestReview对话框)。
这很令人困惑。由于 Calling 的版本限制requestReview,每年 3 次的限制似乎毫无用处,或者至少是过度的。由于这两个相互冲突的限制,即使发布了新版本,用户也可能永远不会看到审阅对话框。但是,我知道事实并非如此。所以,我相信苹果测试当前版本的示例代码是不正确的。苹果强制实施这一限制更有意义,因为他们知道是否出现对话框。
如果API返回一个布尔值来指示对话框是否出现,那么只有对话框出现时我们才能保存版本号。我想知道Apple是否在SDK中这样做了。
我了解苹果关于何时发出请求的其他建议,例如等待用户参与、不中断活动等。这个问题仅涉及与应用程序版本有关的限制。
我是否应该实施版本限制?如果我进行该测试,我怎么能期望出现一个对话框呢?也许,第一次调用requestReview总是会导致审核对话框(如果不是一年内的第三次调用)——是吗?
顺便说一句,我不是第一个有这种担忧的人。请参阅forums.raywenderlich.com。
杰夫
我是 git 新手。所以,我很困惑,可能没有使用正确的术语。
我有两个独立的 Xcode 项目,每个项目都有自己的本地存储库。尽管这些项目具有相似的名称,但每个项目都有单独且不同的源文件。我已经对每个项目进行了几次提交,但是当我在一个项目中提交时,该提交会同时显示在两个项目中。我的新项目在 git 导航器中显示了两个项目(这可能与问题有关)。当我进行新的提交时,旧项目未在 Xcode 中打开。
每个项目都有自己的 .git 文件夹。
细节:
旧项目 1(“调度程序”):显示一个存储库,但我在新项目中所做的最后一次提交出现在那里。
新项目 2(“Scheduler6”):显示两个存储库,我在那里所做的最后一次提交都显示在这两个存储库中。
为什么项目 2 显示两个存储库,这就是我的提交最终出现在两个存储库中的原因吗?如何纠正?这种情况以前发生过,我在旧存储库中执行了“git reset HEAD^”以删除不正确的提交。我想永远停止这种行为。(我对于在终端中使用 git 命令犹豫不决。)
我一直在(Zombie、malloc_error_break、所有 Obj-C 异常、所有异常)上使用断点进行测试。当我为 iOS App Store 进行发布/分发构建时,我忘记关闭它们。这是一个问题吗?(Xcode 5、iOS)
当我使用时objc_setAssociatedObject,我知道是使用保留还是分配,但我不知道如何在OBJC_ASSOCIATION_RETAIN和之间做出决定OBJC_ASSOCIATION_RETAIN_NONATOMIC.何时应该使用其中一种?
ios ×4
objective-c ×3
xcode ×3
apple-watch ×1
breakpoints ×1
fmdb ×1
git ×1
iphone ×1
nib ×1
nsdate ×1
sqlite ×1
storekit ×1
xcode4 ×1
xcode8 ×1
xib ×1