小编Dan*_*ood的帖子

NSSortDescriptor和nil值

我正在使用NSSortDescriptor按升序对NSDate对象进行排序.但是,我需要nil日期位于列表的底部,而目前它们位于顶部.

iphone cocoa cocoa-touch

10
推荐指数
3
解决办法
3654
查看次数

如何在Swift中比较两个协议数组的相等性?

我遇到了一种我确定并不常见的情况.我有两个符合协议的对象数组,我想检查它们是否相等.

我真正想做的是:

protocol Pattern: Equatable
{
    func isEqualTo(other: Pattern) -> Bool
}

func ==(rhs:Pattern, lhs:Pattern) -> Bool
{
    return rhs.isEqualTo(lhs)
}

extension Equatable where Self : Pattern
{
    func isEqualTo(other: Pattern) -> Bool
    {
        guard let o = other as? Self else { return false }
        return self == o
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这会导致编译错误:

Error:(10, 30) protocol 'Pattern' can only be used as a generic constraint because it has Self or associated type requirements

基于这篇文章,我意识到我需要在协议上丢失Equatable继承并将其推送到具体的"Pattern"声明.虽然我真的不明白为什么.如果我通过重载来定义基于协议的两个对象是如何相等的==就我所见,确实没有问题.我甚至不需要知道实际类型或它们是类还是结构.

无论如何,这一切都很好,我现在可以比较,concretePattern.isEqualTo(otherConcretePattern)但问题仍然是我不能再比较这些对象的数组,就像我可以比较具体类型的数组,因为数组相等依赖于重载==运算符.

到目前为止,我设法做到的最好的 …

arrays protocols heterogeneous swift swift2

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

简单的C数组声明/赋值问题

在更高级别的语言中,我将能够在C中使用类似于此示例的内容,并且它会很好.但是,当我编译这个C例子时,它会痛苦地抱怨.如何将新数组分配给我声明的数组?

int values[3];

if(1)
   values = {1,2,3};

printf("%i", values[0]);
Run Code Online (Sandbox Code Playgroud)

谢谢.

c arrays declaration variable-assignment

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

UITableViewCell/UISegmentedControl边界问题

我正试图在设置应用程序中的wifi设置中获得一个UISegmentedControlUITableViewCell.我遇到的问题是我有双边框.我得到一个边框UISegmentedControl,一个用于UITableViewCell.

我猜我需要删除边框UITableViewCell.我怎么能这样做呢?

iphone objective-c uitableview uisegmentedcontrol uikit

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

在C中释放双向链表

我在C中有一个双重链接列表,我对如何释放它感到困惑.我知道我必须遍历列表释放每个节点.混淆的地方在于我的每个节点都有一个指向其他数据的指针,我不确定如何释放它.

我的双重链表看起来像这样:

typedef struct Node_ Node;
typedef struct List_ List;

struct Node_ {
    void *data;
    Node *next;
    Node *prev;
};

struct List_ {
    Node *firstNode;
    Node *lastNode;
};
Run Code Online (Sandbox Code Playgroud)

为了释放列表,我创建了一个名为List_free()的函数,该函数遍历列表,使用Node_free()释放每个节点.这些函数看起来像这样:

void *List_free(List *list)
{
    Node *next = list->firstNode;

    while(next)
    {
        Node *node = next;
        next = node->next;
        Node_free(node);
    }

    free(list);
}

void Node_free(Node *node)
{
    free(node->data);
    free(node);
}
Run Code Online (Sandbox Code Playgroud)

这将导致其失败的地方是node-> data是指向另一个结构的指针,该结构本身包含指针.在我的例子中,我使用相同的列表代码来存储两个不同的结构.

我看到它的方式我有以下选择:

  1. 创建节点保存特定数据的列表.不是很可重复使用.
  2. 找到另一种方法来跟踪节点数据中的指针.

我是在思考正确的方向还是错过了一些明显的东西?这是我第一次尝试C,所以如果这完全错了,我不会感到惊讶.

c memory free

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

核心数据/ NSFetchedResultsController错误

我在核心数据/ NSFetchedResultsController上遇到了一些麻烦.我不完全确定错误在哪里,因为消息很模糊.

当获取的结果控制器没有提取任何对象时,我有一个插入多个对象的问题.如果我尝试插入几个没有提取的对象,以下代码将崩溃并出现以下错误.如果我使用它来插入一个对象,它不会崩溃,如果已经提取了对象,它不会崩溃.

崩溃发生在save:方法上.NSArray中的标题,在此示例中,它包含5个字符串.

严重的应用错误.在Core Data更改处理期间捕获到异常:* - [NSCFArray objectAtIndex:]:index(4)超出bounds(1)with userInfo(null)*由于未捕获的异常'NSRangeException'终止应用程序,原因:'*** - [ NSCFArray objectAtIndex:]:index(4)超出bounds(1)'

NSEnumerator *titleEnumerator = [titles objectEnumerator];
NSString *title;
NSMutableArray *tasks = [NSMutableArray array];
Todo *todo;

while(title = [titleEnumerator nextObject])
{
    todo = (Todo *)[NSEntityDescription insertNewObjectForEntityForName:@"Todo" inManagedObjectContext:managedObjectContext];
    todo.title = title;
    todo.state = [NSNumber numberWithInteger:TodoStateIncomplete];
    todo.priority = [NSNumber numberWithInteger:TodoPriorityNormal];
    todo.timeStamp = [NSDate date];
    todo.dueDate = [NSDate distantFuture];
}

NSError *error;

if(![managedObjectContext save:&error])
{
    NSLog(@"Unresolved error %@ %@", error, [error userInfo]);
    abort();
}
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch core-data uikit

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

UIRemoteNotificationType无效转换

我试图在我的应用程序中使用这个相当标准的代码行:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
Run Code Online (Sandbox Code Playgroud)

但是我收到了以下错误:

error: invalid conversion from 'int' to 'UIRemoteNotificationType'
Run Code Online (Sandbox Code Playgroud)

如果我只使用其中一种通知类型,但每次尝试使用多个通知类型时都会失败.我有什么想法我做错了吗?

iphone cocoa-touch

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

iOS SSO,包含多个应用

我已经搜索了这个问题的答案,但一直找不到任何答案.

我有一系列iOS应用程序,我想使用相同的Facebook应用程序.SSO与我创建和测试的第一个应用程序完美配合.但所有其他的失败并返回一个unknown_error.

我打电话给:

self.facebook = [[[Facebook alloc] initWithAppId:<app id> urlSchemeSuffix:<app suffix> andDelegate:self] autorelease];
Run Code Online (Sandbox Code Playgroud)

这一切都有效,即使登录失败,我也会返回正确的应用程序.但是,每次我的:

- (void)fbDidNotLogin:(BOOL)cancelled
Run Code Online (Sandbox Code Playgroud)

方法被取消,取消等于NO.

我需要在某处更改某些其他设置吗?这是因为我的应用程序尚未提交到App Store(除了正在运行的应用程序)?如果是这样的话,我怎么打算测试这些东西呢?

谢谢,丹尼尔

facebook single-sign-on ios

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