我刚刚下载了最新的XCode(7.1测试版),并开始玩iOS9.
我有一个完美的应用程序在iOS8中没有错误,但现在我从UITableViewCell类中覆盖drawRect方法得到以下错误:
"此应用程序正在从后台线程修改自动布局引擎,这可能导致引擎损坏和奇怪的崩溃.这将导致未来版本中的异常."
这是回溯:
Stack:(
0 CoreFoundation 0x000000010a749f65 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x0000000109dcfdeb objc_exception_throw + 48
2 CoreFoundation 0x000000010a749e9d +[NSException raise:format:] + 205
3 Foundation 0x0000000109b442e5 _AssertAutolayoutOnMainThreadOnly + 79
4 Foundation 0x00000001099a4ece -[NSISEngine withBehaviors:performModifications:] + 31
5 UIKit 0x000000010b9d425b -[UIView(AdditionalLayoutSupport) _withAutomaticEngineOptimizationDisabledIfEngineExists:] + 58
6 UIKit 0x000000010b9d4d9e -[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded] + 254
7 UIKit 0x000000010b702760 -[UITableViewCellContentView updateConstraintsIfNeeded] + 185
8 UIKit 0x000000010b9d5ab3 -[UIView(AdditionalLayoutSupport) _updateConstraintsAtEngineLevelIfNeeded] + 272
9 UIKit 0x000000010b1e6274 -[UIView(Hierarchy) _updateConstraintsAsNecessaryAndApplyLayoutFromEngine] + 159
10 UIKit 0x000000010b1f5d84 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 710
11 …Run Code Online (Sandbox Code Playgroud) 我有一个带有自定义UICollectionLayout的UICollectionView.这一切都很好,直到我尝试插入一行...
然后我得到以下错误,似乎无法弄清楚如何解决它.
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'no UICollectionViewLayoutAttributes instance for -layoutAttributesForItemAtIndexPath: <NSIndexPath: 0xc000000000000016> {length = 2, path = 0 - 0}'
*** First throw call stack:
(
0 CoreFoundation 0x000000010915ae65 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x0000000108789deb objc_exception_throw + 48
2 CoreFoundation 0x000000010915acca +[NSException raise:format:arguments:] + 106
3 Foundation 0x000000010591a4de -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
4 UIKit 0x00000001073e361c -[UICollectionViewData layoutAttributesForItemAtIndexPath:] + 627
5 UIKit 0x00000001073a2859 __51-[UICollectionView _viewAnimationsForCurrentUpdate]_block_invoke1541 + 176
6 UIKit 0x00000001073a02ed -[UICollectionView _viewAnimationsForCurrentUpdate] + 4524
7 …Run Code Online (Sandbox Code Playgroud) 我一直在为Swift 3更新我的Swift代码(非常兴奋),到目前为止一直很好.但我确实贬低了一些我似乎无法更新的代码.
我知道我错过了一些非常简单的东西,但我看不出是什么.
这是我在Swift 2.2中的内容:
var column = 0
[...]
for item in 0 ..< collectionView!.numberOfItemsInSection(0) {
[...]
column = column >= (numberOfColumns - 1) ? 0 : ++column
}
Run Code Online (Sandbox Code Playgroud)
的++column当然是被弃用斯威夫特3赞成column += 1
但是,在此上下文中,它会产生错误:
没有'+ ='候选者产生预期的上下文结果类型'Int'
由于这行代码(column = column >= (numberOfColumns - 1) ? 0 : column += 1)产生错误,我尝试了以下方法:
var newCol = column
column = column >= (numberOfColumns - 1) ? 0 : newCol += 1
Run Code Online (Sandbox Code Playgroud)
但我得到了同样的错误.
有人能指出我正确的方向吗?
我在 Flutter 应用程序中遇到了相当复杂的情况。我有一个主屏幕,它是一个可滑动的 PageView,显示 3 个子小部件:日历、消息、配置文件。
我目前的问题是日历小部件。它是从initState()方法动态填充的。
我设法解决了从一个页面滑动到另一个页面导致每次重建日历小部件的第一个问题。
我现在的问题是当我点击日历列表中的一个项目时,我打开了详细信息视图。然后,当我关闭它时……一切都还好。但是,当我再次滑动时,再次调用 initState() 方法并重建列表视图。我想防止这种情况并保持它的状态。有什么建议 ?
这是家庭代码。
class HomeStack extends StatefulWidget {
final pages = <HomePages> [
CalendarScreen(),
MessagesScreen(),
ProfileScreen(),
];
@override
_HomeStackState createState() => _HomeStackState();
}
class _HomeStackState extends State<HomeStack> with AutomaticKeepAliveClientMixin<HomeStack> {
User user;
@override
bool get wantKeepAlive{
return true;
}
@override
void initState() {
print("Init home");
_getUser();
super.initState();
}
void _getUser() async {
User _user = await HomeBloc.getUserProfile();
setState(() {
user = _user;
});
}
final PageController _pageController = …Run Code Online (Sandbox Code Playgroud) 我试图让两个日期之间的天数差从拍摄DatePicker。除了一个单一的日期:3 月 31 日,这工作正常。
DateTimes当其中一个日期是 3 月 31 日时,两者之间的天数差1 天是错误的。我知道这是由于光节约造成的,而 3 月是 30.9 天,而不是 31 天,因此我猜是错误。但是除了手动检查日期是否等于 3 月 31 日并在结果中添加一天之外,有没有人知道如何解决这个问题?
可以在Dart Pad 中运行的两个非常简单的示例:
DateTime aprilFirst = DateTime(2019, 3, 30);
DateTime marchThirtyFirst = DateTime(2019, 3, 31);
print(aprilFirst.difference(marchThirtyFirst).inDays); => -1
Run Code Online (Sandbox Code Playgroud)
DateTime marchThirty = DateTime(2019, 4, 1);
DateTime marchThirtyFirst = DateTime(2019, 3, 31);
print(marchThirty.difference(marchThirtyFirst).inDays); => 0
Run Code Online (Sandbox Code Playgroud)
更新:
DateTime aprilFirst = DateTime(2019, 4, 1);
print(aprilFirst.add(Duration(days: -1))); => 2019-03-30 23:00:00.000
Run Code Online (Sandbox Code Playgroud)
这应该打印 2019-03-31 23:00:00.000 !
我尝试了 …