小编Sen*_*ful的帖子

对于一对多关系,每个级联删除选项的所有副作用是什么?

假设我有两个表,DepartmentEmployee.每个员工只有一个部门.每个部门都有一名或多名员工.

我是否可以使用级联删除选项的任意组合来强制执行此规则而无需编写特殊代码?

换句话说,这是两个规则:

  1. 只有在没有员工的情况下才能删除部门.
  2. 当部门中的最后一名员工被删除时,应删除该部门.

如果没有,那么我应该使用哪一组来帮助我实施这一业务逻辑?

core-data

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

弱属性未设置为零

我在UIViewController上定义了以下属性:

@property (nonatomic, strong) UIButton *strongButton;
@property (nonatomic, weak) UIButton *weakButton;
Run Code Online (Sandbox Code Playgroud)

这些属性不是通过Interface Builder设置的(即只要我没有在代码中明确设置它们,它们将始终保持为零).

我还在UIButton上添加了一个类别,以确切知道它何时被解除分配:

@implementation UIButton (test)
- (void)dealloc { NSLog(@"Dealloc called."); }
@end
Run Code Online (Sandbox Code Playgroud)

viewDidLoad在UIViewController中有以下代码:

self.strongButton = [[UIButton alloc] init];
self.weakButton = self.strongButton;
NSAssert(self.weakButton != nil, @"A: Weak button should not be nil.");
NSLog(@"Setting to nil");
self.strongButton = nil;
NSLog(@"Done setting to nil");
NSAssert(self.weakButton == nil, @"B: Weak button should be nil.");
Run Code Online (Sandbox Code Playgroud)

当我运行该代码时,它在第二个断言(B)上失败.日志显示:

  • 设置为零
  • 完成设置为零
  • *断言失败 - [ViewController viewDidLoad]
  • *因未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因是:'B:弱按钮应为零.'

但是,当我注释掉第一个断言时:

self.strongButton = [[UIButton …
Run Code Online (Sandbox Code Playgroud)

memory-management objective-c automatic-ref-counting

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

添加/删除约束时,自动布局有多宽容?

添加和删​​除约束时,自动布局系统有多宽松?它会导致崩溃,警告,或者当我错误地使用它时会发生什么事吗?

特别是,当我做以下事情时会发生什么?

  1. 删除不属于目标的约束?
  2. 添加目标已拥有的约束?
  3. 向一个高于最近共同祖先的视图添加约束?
  4. 向一个低于最近共同祖先的视图添加约束?
  5. 将视图已拥有的约束添加到新(有效)视图?

ios autolayout

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

如何在Interface Builder中将UITableViewCell的内容视图转换为普通的UIView?

我在Interface Builder中设计了一个复杂的UITableViewCell,它具有许多子视图和约束。问题在于它们很多都是内容视图的直接子代。现在,我想在内容视图和所有子视图之间插入一个UIView。

或者,考虑这种情况的另一种方式是想象我想将所有单元格的内容包括在没有表视图的普通UIViewController中。

无需手动重新创建所有约束的最简单方法是什么?

interface-builder uitableview uiview ios xcode6

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

NEHotspotHelper注释没有出现

我们尝试了新的NetworkExtension API.我们成功地重新创建了应用程序中的所有步骤.但是,我们有一个问题,我们仍然没有在Wifi设置屏幕中看到SSID名称下面的自定义注释.我们在ios 9 Beta 3,xcode 7 beta 3上.

我们已成功完成这些步骤:

  • @note 1应用程序的Info.plist必须包含一个包含'network-authentication'的UIBackgroundModes数组*.

  • @note 2*应用程序必须将'com.apple.developer.networking.HotspotHelper'*设置为其权利之一.权利的值是布尔值*值true.

这是我们在App中的代码.我们试图通过文本"试试这里"以"Internet"的名称来注释SSID.我们得到了为SSID"Internet"调用setConfidence方法的日志.但是,我们在Wifi选择屏幕中看不到实际的注释.

我们还试图为选项对象传递'nil',该对象承诺将App名称显示为默认注释.但我们也没有看到.我们得到方法registerWithOptions()的调用返回'true',当我们打开wifi设置屏幕时我们得到回调

 

NSMutableDictionary* options = [[NSMutableDictionary alloc] init]; 
[options setObject:@"Try Here" forKey:kNEHotspotHelperOptionDisplayName]; 
 dispatch_queue_t queue = dispatch_queue_create("com.myapp.ex", 0); 
BOOL returnType = [NEHotspotHelper registerWithOptions:options queue:queue 
handler: ^(NEHotspotHelperCommand * cmd) { 
    if(cmd.commandType == kNEHotspotHelperCommandTypeEvaluate || cmd.commandType == kNEHotspotHelperCommandTypeFilterScanList ) { 
         
        for (NEHotspotNetwork* network  in cmd.networkList) {  
            if ([network.SSID isEqualToString:@"Internet"]){ 
                [network setConfidence:kNEHotspotHelperConfidenceHigh];               
                NSLog(@"Confidance set to high for ssid:%@",network.SSID); 
            }  
        }    
    } 
}];
Run Code Online (Sandbox Code Playgroud)

=========================

请帮助我们了解我们缺少的是什么?

iphone objective-c ios networkextension

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

在 CalendarEvent 上调用 addGuest 时如何发送标准邀请电子邮件?

每当我通过 Google 日历 UI 添加访客时,都会弹出以下对话框:

在此处输入图片说明

如果我选择“发送”,它会向用户发送一封格式良好的电子邮件,并提供响应日历事件的选项:

在此处输入图片说明

当您手动使用 Google 日历 UI 时,这可以完美运行。问题是我正在尝试使用 Google Apps 脚本来自动将人员添加到事件中。

我正在使用addGuest()以编程方式将客人添加到 CalendarEvent :

event.addGuest("user@example.com");
Run Code Online (Sandbox Code Playgroud)

但是,似乎没有发送电子邮件的选项。

我能找到的最接近的是,当您以编程方式创建事件时,您可以设置sendInvites

  var event = CalendarApp.getDefaultCalendar().createEvent(
    'Test',
    new Date('April 5, 2029 20:00:00 UTC'),
    new Date('April 5, 2029 21:00:00 UTC'),
    {sendInvites: true, guests:"your.email+1@example.com"});
  Logger.log(event.getId());
Run Code Online (Sandbox Code Playgroud)

这将正确发送格式良好的电子邮件。

但是,该sendInvites选项仅在新创建事件时有效。如果以后我打电话:

  var event = CalendarApp.getEventById("insert_id_here");
  event.addGuest("your.email+2@example.com");
Run Code Online (Sandbox Code Playgroud)

...它不会发送电子邮件更新(即使该事件是使用 创建的sendInvites=true)。这意味着sendInvites是暂时的,不会在事件上持续存在。

sendInvites调用addGuest()事件时有什么办法吗?例如event.addGuest("user@example.com", {sendInvite: true})

是否有任何其他解决方法会产生与点击上面 UI 中的“发送”按钮时发送的电子邮件相同的电子邮件?

注:我希望使用MailApp,因为它不会被很好地格式化像一个谷歌发送电子邮件自动发送出去(例如,具有嵌入式日历邀请,出席者,描述,响应链接等,等,等)。


更新:

  • 我刚刚在 API 中看到 …

google-calendar-api google-apps-script

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

如何撤消`-FIRAnalyticsDebugEnabled`?

我刚刚添加FIRAnalyticsDebugEnabled了一个启动参数,正如在几个地方所建议的那样:

  1. Xcode 控制台:

    6.5.0 - [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see [https://help.apple.com/xcode/mac/8.0/])
    
    Run Code Online (Sandbox Code Playgroud)
  2. 开始使用谷歌Analytics(分析)适用于iOS指南:

    在此处输入图片说明

  3. 等等。

启用它后,我开始看到输出,例如:

Event is not subject to real-time event count daily limit. Marking an event as real-time. Event name, parameters: session_start (_s), {
    firebase_debug (_dbg) = 1;
    firebase_event_origin (_o) = auto;
    ga_realtime (_r) = 1;
    session_id (_sid) = 123;
    session_number (_sno) = 2;
}
Run Code Online (Sandbox Code Playgroud)

现在我知道事件正在正确输出,我想禁用它,因为它正在向控制台发送垃圾邮件。但是,上面提到的这些资源都没有讨论如何禁用它。

如何禁用它?

我尝试删除启动参数,但日志仍然出现。


请注意,这不是这些类似问题的重复:

ios firebase-analytics

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

如何计算 3D 中点的偏航、俯仰和滚转?

给定 3D 空间中的一个点,将一条线变换为指向该对象所需的三个角度(例如欧拉角)是多少?

想象一下,我有一条 3D 线(或一个盒子),我想转换它的航向、俯仰和坡度以从原点指向 3D 点,我会为这些角度使用什么值?

我无法计算出计算指向诸如 之类的位置的角度的数学方法(1,2,3)

math 3d vector angle

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

如何在SceneKit中的两点之间画一条线?

如果我在 SceneKit 中有两个点(例如(1,2,3)(-1,-1,-1))。我如何在两者之间划清界限?

我看到有一个我可以使用的 SCNBox 对象,但这只允许我指定中心(例如 via simdPosition)。修改它的其他方法是变换(我不知道如何使用)或欧拉角(我不知道如何计算我需要使用哪些角)。

math 3d scenekit swift arkit

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

如何刷新NSFetchedResultsController?

我有一个NSFetchedResultsController,它在UITableView中显示数据.在选择创建Core Data项目时,我正在使用Xcode提供的样板代码.我将以下谓词添加到NSFetchedResultsController使用的NSFetchRequest中(在NSFetchedResultsController初始化之前):

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"deleted == NO"];
[fetchRequest setPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)

现在在我的应用程序的另一个位置,我像这样设置已删除的属性(伪代码):

myManagedObject.deleted = YES
saveDataContext
Run Code Online (Sandbox Code Playgroud)

当我返回TableViewController时,它仍然显示这个"已删除"的行.

当我尝试重新加载表视图时,没有任何反应.

当我尝试使用时重新加载fetchedResultsController时performFetch,它说:

'致命错误:部分信息的持久缓存与当前配置不匹配.您已经非法改变了NSFetchedResultsController的获取请求,其谓词或其排序描述符,而无需禁用缓存或使用+ deleteCacheWithName:'

如果我删除缓存,在init方法中调用performFetch,然后调用[myTable reloadData]它.

是不是有更简单的方法来刷新数据?最好是允许你使用NSFetchedResultsController的缓存功能吗?

据我所知,我修改获取请求,谓词或排序描述符的唯一地方是在分配和插入NSFetchedResultsController的相同方法中,因此它显示的错误消息似乎不正确.

更新:现在我理解NSFetchedResultsController了一点,我明白它不会自动删除行,而且它controller:didChangeObject:atIndexPath:forChangeType:nowIndexPath:是主要负责删除行的方法.我已经实现了这个方法,因为我在项目中使用了Apple的模板.

但是,在我的情况下,我实际上并没有删除一个项目,我只是更新一个property(deleted)来指定该项目不再存在于列表中.这意味着该controller:didChangeObject:atIndexPath:forChangeType:nowIndexPath:方法的改变类型为NSFetchedResultsChangeUpdate,而不是NSFetchedResultsChangeDelete.我将代码更新为:

  case NSFetchedResultsChangeUpdate: {
    MyObj *obj = (MyObj *)anObject;
    if (obj.deletedValue) { // NOTE: deletedValue returns the deleted property as BOOL
      [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    } else {
      [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
      break;
    }
  } …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch core-data objective-c nspredicate nsfetchedresultscontroller

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