小编Pet*_*rbo的帖子

Objective-C使用点符号对合成属性ivars

所以,假设我有一个UITextField的合成属性,我将其命名为field1.从我的理解是你应该使用self.field1 = newValue来改变field1值.通过使用点表示法,您可以自动使用编译器创建的setter.(或者使用它而不用点符号[self setField1:newValue])

但我已经看到了一些示例,他们使用相同的点符号方法设置field1的ivars,如:

field1.text = @"Text";
Run Code Online (Sandbox Code Playgroud)

这是否意味着在声明属性时,您可以在所有属性的ivars上自动使用点表示法?或者这是否可能只是因为在UITextField类中,ivar"text"被声明为属性?假设文本未被声明为属性,设置文本ivar的正确方法是:

[field1 setText:@"Text"]
Run Code Online (Sandbox Code Playgroud)

syntax properties objective-c

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

核心数据 - 取消删除规则

我在实体组和联系人之间存在多对多关系。一个组可以有多个联系人,一个联系人可以存在于多个组中。

现在如果我要删除一个组,我应该如何处理对它所拥有的联系人的所有引用?

在我看来,有两个选项:使用 nullify 规则,这会将删除的组引用设置为 nil 对于那些具有该组的联系人。但这种方式引入了微观管理问题。然后我必须在每次列出联系人组时检查是否有任何组为零。

所以对我来说,更优雅的解决方案是,当一个组被删除时,我会从联系人对象中完全删除组引用(?),这样它就不会包含任何组的 nil 值。那可能吗?

null core-data objective-c

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

iOS6向后兼容性

我想支持运行iOS5和iOS6的用户.但例如UIViewController的方法-viewDidUnload在iOS6的已经过时了.那么我如何将它用于运行iOS5的用户,而不是用于运行iOS6的用户呢?

cocoa-touch backwards-compatibility deprecated ios6

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

Objective-C - 构建用于后台处理的GCD代码

我有一些代码需要一点时间来处理,因此它应该适当地不应该在主队列上运行.但是我不确定如何正确地"构建"GCD代码段.即每次应用程序变为活动状态我都在进行同步操作:

AppDelegate.m

- (void)applicationDidBecomeActive:(UIApplication *)application {

    AddressBookHelper *abHelper = [AddressBookHelper sharedInstance]; // singleton helper class of NSObject

    [abHelper sync];
}
Run Code Online (Sandbox Code Playgroud)

AddressBookHelper中的同步代码如下所示:

AddressBookHelper.m

- (void)sync {

    NSArray *people = // Fetching some people from Core Data

    NSMutableArray *syncConflicts;
    // Start doing some business logic, iterating over data and so on

    for (id object in people) {
    // Process some data
        [syncConflicts addObject:object];
    }

    self.syncConflicts = syncConflicts;

    // I have separated this method to keep the code cleaner and to separate the …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c grand-central-dispatch

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

核心数据死锁

我正在做2个Core Data提取,当它们大约在同一时间执行时,它们将导致主线程中的死锁,导致我的应用程序冻结.

提取是在主线程上进行的.处理它的一种方法是确保提取不是在同一时间进行的,但我无法控制何时进行提取.有没有其他办法可以避免这种僵局?

暂停应用程序时的堆栈跟踪是:

#0  0x9a5d191a in __psynch_mutexwait ()
#1  0x9166713b in pthread_mutex_lock ()
#2  0x01e5d591 in -[_PFLock lock] ()
#3  0x01e5d56a in -[NSPersistentStoreCoordinator lock] ()
#4  0x01e720ee in -[NSPersistentStoreCoordinator executeRequest:withContext:error:] ()
#5  0x01e70539 in -[NSManagedObjectContext executeFetchRequest:error:] ()
#6  0x0007cd62 in -[CoreDataHelper fetchEntity:predicate:andSortDescriptors:inManagedObjectContext:] at /xxx/CoreDataHelper.m:150
#7  0x000075f6 in -[RemindersListViewController refreshReminders] at /xxx/RemindersListViewController.m:64
#8  0x000082f8 in -[RemindersListViewController refreshGUI] at /xxx/RemindersListViewController.m:187
#9  0x00003735 in __58-[AppDelegate setTabCountAndScheduleRemindersInBackground]_block_invoke_2 at /xxx/AppDelegate.m:114
#10 0x022dc53f in _dispatch_call_block_and_release ()
#11 0x022ee014 in _dispatch_client_callout ()
#12 0x022de7d5 in _dispatch_main_queue_callback_4CF …
Run Code Online (Sandbox Code Playgroud)

cocoa deadlock core-data objective-c ios

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

获取视图的 CGRect

我使用的是“RectGetter”来获得CGRectView

像这样:

Text("Hello")
    .background(RectGetter(rect: self.$rect))


struct RectGetter: View {
    @Binding var rect: CGRect

    var body: some View {
        GeometryReader { proxy in
            self.createView(proxy: proxy)
        }
    }

    func createView(proxy: GeometryProxy) -> some View {
        DispatchQueue.main.async {
            self.rect = proxy.frame(in: .global) // crash here
        }

        return Rectangle().fill(Color.clear)
    }
}
Run Code Online (Sandbox Code Playgroud)

但有时我在设置 rect 时会崩溃。

Thread 0 name:
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x00000001a1ec5ec4 __pthread_kill + 8
1   libsystem_pthread.dylib         0x00000001a1de5724 pthread_kill$VARIANT$armv81 + 216 (pthread.c:1458)
2   libsystem_c.dylib               0x00000001a1d358c0 __abort + 112 (abort.c:147) …
Run Code Online (Sandbox Code Playgroud)

crash cgrect swiftui

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