Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone CoreData调试与发布问题_Iphone_Ios_Core Data - Fatal编程技术网

Iphone CoreData调试与发布问题

Iphone CoreData调试与发布问题,iphone,ios,core-data,Iphone,Ios,Core Data,好的,我有一个coreData模型,它有一个名为TechnicalQuery的实体。像这样 TechnicalQuery -------------- NSString *detail NSDate *createdDate NSString *solution NSString *name ... 在应用程序中,是一个同步过程(根据规范,该应用程序处于脱机状态),使用该应用程序的人员在返回办公室并连接时将进行同步。不管怎样,这并不重要 我使用相同的名称为TechnicalQuery创建了一个

好的,我有一个coreData模型,它有一个名为
TechnicalQuery
实体。像这样

TechnicalQuery
--------------
NSString *detail
NSDate *createdDate
NSString *solution
NSString *name
...
在应用程序中,是一个同步过程(根据规范,该应用程序处于脱机状态),使用该应用程序的人员在返回办公室并连接时将进行同步。不管怎样,这并不重要

我使用相同的名称为
TechnicalQuery
创建了一个
NSManagedObject
子类

它定义了
@属性
详细信息以及
@动态
详细信息

目前数据库中只有一个技术查询。我可以看到这一点,通过使用应用程序查看技术查询“屏幕”上的所有细节等。。。它显示名称、解决方案、详细信息、创建日期等。。。一切都在那里

我可以在应用程序中更新解决方案文本。然后,当我稍后返回时,更新仍然存在。核心数据运行良好

当我同步回服务器时,我的问题就出现了

在调试中,这可以正常工作。我将同步进程转移到后台线程。然后,该线程查找自上次同步以来已更新的任何TQ,然后将其转换为
JSON
数据。然后,它启动另一个队列并将这些TQ的所有上传排队

注意!在任何时候,我都不会在线程之间传递
ManagedObjects
。我在一个函数中运行fetchrequest,然后存储数组,在下一个函数(同一线程)中处理数组。传递到下一个线程的唯一内容是它需要发送到的
JSON
数据和特定于对象的URL,而根本没有CoreData对象

JSON数据由
ManagedObject
子类文件中的一个函数收集(它实际上属于
NSManagedObject
的一个类别,但您知道了……)该函数首先将对象转换为与服务器所需格式相匹配的
NSDictionary
,然后将其转换

无论如何,在调试模式下(即直接从Xcode运行到我的iPhone5上),它工作正常。字典(上传数据都很好)

然而,(最终到达了那里)当在发布模式下运行时(即,当我在仪器中配置文件时),生成NSDictionary的函数爆炸了。它告诉我属性“detail”为nil。当我
NSLog
属性时,它告诉我它为nil(在发布模式下),但显示文本(在调试模式下)

你可以看到这些都发生在不到一秒钟的时间里

第2行是collectData函数内部技术查询的name和detail属性的NSLog

第4行是processArray函数内部技术查询的name和detail属性的NSLog

如您所见,第4行显示了属性的空值

第6行是尝试将detail属性添加到NSMutableArray的异常日志。由于detail属性为null,因此出错

::编辑4::

添加具有线程ID的日志

1. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: Collecting technical queries. Thread: <NSThread: 0x1d263fa0>{name = (null), num = 8}
2. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: Tech Query: Name: test Detail: Test description from Olivers iPhone. Thread: <NSThread: 0x1d263fa0>{name = (null), num = 8}
3. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: pushing tech queries. Thread: <NSThread: 0x1d263fa0>{name = (null), num = 8}
4. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: Tech Query: Name: (null) Detail: (null) Thread: <NSThread: 0x1d263fa0>{name = (null), num = 8}
5. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: (null)
6. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: Exception! *** setObjectForKey: object cannot be nil (key: Detail)
7. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: Something Went Wrong!
1.Nov 29 10:32:08 Olivers-iPhone5[2749]:收集技术查询。线程:{name=(null),num=8}
2.Nov 29 10:32:08 Olivers-iPhone5[2749]:技术查询:名称:测试详细信息:来自Olivers iPhone的测试描述。线程:{Name=(null),num=8}
3.Nov 29 10:32:08 Olivers-iPhone5[2749]:推送技术查询。线程:{name=(null),num=8}
4.Nov 29 10:32:08 Olivers-iPhone5[2749]:技术查询:Name:(null)Detail:(null)Thread:{Name=(null),num=8}
5.Nov 29 10:32:08 Olivers-iPhone5[2749]:(空)
6.Nov 29 10:32:08 Olivers-iPhone5[2749]:异常!***setObjectForKey:对象不能为零(键:详细信息)
11月29日10:32:08 Olivers-iPhone5[2749]:出了点问题!
你可以从这里看到,我绝对不会在线程之间传递任何东西。这一切都发生在同一个线程上

再次感谢

::编辑5::

为了向您展示我是如何不编造这些内容的,下面是调试构建的日志

1. 2012-11-29 10:36:08.471 [2767:161f] Collecting technical queries. Thread: <NSThread: 0x1cd52fb0>{name = (null), num = 8}
2. 2012-11-29 10:36:08.474 [2767:161f] Tech Query: Name: test Detail: Test description from Olivers iPhone. Thread: <NSThread: 0x1cd52fb0>{name = (null), num = 8}
3. 2012-11-29 10:36:08.474 [2767:161f] pushing tech queries. Thread: <NSThread: 0x1cd52fb0>{name = (null), num = 8}
4. 2012-11-29 10:36:08.475 [2767:161f] Tech Query: Name: test Detail: Test description from Olivers iPhone. Thread: <NSThread: 0x1cd52fb0>{name = (null), num = 8}
5. 2012-11-29 10:36:08.476 [2767:161f] Test description from Olivers iPhone.
6. 2012-11-29 10:36:08.483 [2767:1623] Uploading to url <I can't put the URL here as it's private>
7. 2012-11-29 10:36:08.906 [2767:520f] Upload Done
收集技术查询。线程:{name=(null),num=8} 2.2012-11-29 10:36:08.474[2767:161f]技术查询:名称:测试详细信息:来自Olivers iPhone的测试描述。线程:{Name=(null),num=8} 3.2012-11-29 10:36:08.474[2767:161f]推送技术查询。线程:{name=(null),num=8} 4.2012-11-29 10:36:08.475[2767:161f]技术查询:名称:测试详细信息:来自Olivers iPhone的测试描述。线程:{Name=(null),num=8} 5.2012-11-29 10:36:08.476[2767:161f]奥利弗iPhone的测试说明。 6.2012-11-29 10:36:08.483[2767:1623]上传到url 7.2012-11-29 10:36:08.906[2767:520f]上传完成
这是完全相同的代码。唯一的区别是,这是在调试模式下运行的,日志是从Xcode复制的,而不是从Organizer设备日志复制的。

Fogmeister

你并没有给我们提供太多的信息。因此,任何人都会猜测

首先,您可以调试代码的发布版本。只需更改Xcode方案中的配置文件

第二,当您切换到发布模式时,您的代码会发生什么变化?为什么调试编译时标志中的变化会改变您的产品(当您抛出调试标志时,核心数据不会改变,所以问题不大可能)

为了进一步帮助您,SO社区通常需要查看一些代码。如果您共享一些代码,人们可能会查看这些代码来帮助您


安德鲁

我不知道最后的答案,但这可能会帮助您更接近解决方案

我们所知道的是,调试和发布配置上存在不同的行为。您应该检查构建设置中的所有差异,并尝试处理这些差异


我曾经在发布时遇到过类似的奇怪问题。在将优化级别更改为“最快、最小”后,该错误在调试时也可以重现。

虽然我无法准确回答您的问题,但我遇到了这个问题,结果是
1. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: Collecting technical queries. Thread: <NSThread: 0x1d263fa0>{name = (null), num = 8}
2. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: Tech Query: Name: test Detail: Test description from Olivers iPhone. Thread: <NSThread: 0x1d263fa0>{name = (null), num = 8}
3. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: pushing tech queries. Thread: <NSThread: 0x1d263fa0>{name = (null), num = 8}
4. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: Tech Query: Name: (null) Detail: (null) Thread: <NSThread: 0x1d263fa0>{name = (null), num = 8}
5. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: (null)
6. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: Exception! *** setObjectForKey: object cannot be nil (key: Detail)
7. Nov 29 10:32:08 Olivers-iPhone5 [2749] <Warning>: Something Went Wrong!
1. 2012-11-29 10:36:08.471 [2767:161f] Collecting technical queries. Thread: <NSThread: 0x1cd52fb0>{name = (null), num = 8}
2. 2012-11-29 10:36:08.474 [2767:161f] Tech Query: Name: test Detail: Test description from Olivers iPhone. Thread: <NSThread: 0x1cd52fb0>{name = (null), num = 8}
3. 2012-11-29 10:36:08.474 [2767:161f] pushing tech queries. Thread: <NSThread: 0x1cd52fb0>{name = (null), num = 8}
4. 2012-11-29 10:36:08.475 [2767:161f] Tech Query: Name: test Detail: Test description from Olivers iPhone. Thread: <NSThread: 0x1cd52fb0>{name = (null), num = 8}
5. 2012-11-29 10:36:08.476 [2767:161f] Test description from Olivers iPhone.
6. 2012-11-29 10:36:08.483 [2767:1623] Uploading to url <I can't put the URL here as it's private>
7. 2012-11-29 10:36:08.906 [2767:520f] Upload Done