我正在使用NSSortDescriptor按升序对NSDate对象进行排序.但是,我需要nil日期位于列表的底部,而目前它们位于顶部.
我遇到了一种我确定并不常见的情况.我有两个符合协议的对象数组,我想检查它们是否相等.
我真正想做的是:
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)但问题仍然是我不能再比较这些对象的数组,就像我可以比较具体类型的数组,因为数组相等依赖于重载==运算符.
到目前为止,我设法做到的最好的 …
在更高级别的语言中,我将能够在C中使用类似于此示例的内容,并且它会很好.但是,当我编译这个C例子时,它会痛苦地抱怨.如何将新数组分配给我声明的数组?
int values[3];
if(1)
values = {1,2,3};
printf("%i", values[0]);
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正试图在设置应用程序中的wifi设置中获得一个UISegmentedControl组UITableViewCell.我遇到的问题是我有双边框.我得到一个边框UISegmentedControl,一个用于UITableViewCell.
我猜我需要删除边框UITableViewCell.我怎么能这样做呢?
我在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是指向另一个结构的指针,该结构本身包含指针.在我的例子中,我使用相同的列表代码来存储两个不同的结构.
我看到它的方式我有以下选择:
我是在思考正确的方向还是错过了一些明显的东西?这是我第一次尝试C,所以如果这完全错了,我不会感到惊讶.
我在核心数据/ 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) 我试图在我的应用程序中使用这个相当标准的代码行:
[[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)
如果我只使用其中一种通知类型,但每次尝试使用多个通知类型时都会失败.我有什么想法我做错了吗?
我已经搜索了这个问题的答案,但一直找不到任何答案.
我有一系列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(除了正在运行的应用程序)?如果是这样的话,我怎么打算测试这些东西呢?
谢谢,丹尼尔
iphone ×4
cocoa-touch ×3
arrays ×2
c ×2
uikit ×2
cocoa ×1
core-data ×1
declaration ×1
facebook ×1
free ×1
ios ×1
memory ×1
objective-c ×1
protocols ×1
swift ×1
swift2 ×1
uitableview ×1