Xamarin.forms: [๋ฒ„๊ทธ] [iOS] ์‚ญ์ œ ๋œ ๊ฐœ์ฒด์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐœ์ฒด ์ด๋ฆ„ : 'GroupableItemsViewController`1

์— ๋งŒ๋“  2019๋…„ 10์›” 30์ผ  ยท  91์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: xamarin/Xamarin.Forms

๊ธฐ์ˆ 

ํ—ค๋”๊ฐ€์žˆ๋Š” ์ปฌ๋ ‰์…˜ ๋ทฐ๋Š” ์…ธ ํ”Œ๋ผ์ด ์•„์›ƒ์„ ํ†ตํ•ด ํƒ์ƒ‰ ํ•œ ํ›„ ์ถฉ๋Œ์„ ์ผ์œผ ํ‚ต๋‹ˆ๋‹ค.
๋ฒ„๊ทธ๋Š” iOS ์ „์šฉ์ž…๋‹ˆ๋‹ค. Android์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํƒญ์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ฑ์ด ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„

  1. ์•ฑ ์—ด๊ธฐ
  2. ์…ธ ํ”Œ๋ผ์ด ์•„์›ƒ์„ ์‚ฌ์šฉํ•˜์—ฌ 2 ํŽ˜์ด์ง€๋กœ ์ด๋™
  3. ์…ธ ํ”Œ๋ผ์ด ์•„์›ƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€ 1๋กœ ๋‹ค์‹œ ์ด๋™

-> ์•ฑ์ด ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘

์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™

๋˜์กŒ์Šต๋‹ˆ๋‹ค :

System.ObjectDisposedException : '์‚ญ์ œ ๋œ ๊ฐœ์ฒด์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ฐœ์ฒด ์ด๋ฆ„ : 'GroupableItemsViewController`1'. '
๋ฐ ์ถฉ๋Œ.

๊ธฐ๋ณธ ์ •๋ณด

  • ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๋ฒ„์ „ : 4.3.0.947036, 4.3.0.908675, ..., 4.4.0.991265
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ์•Œ๋ ค์ง„ ์–‘ํ˜ธํ•œ ๋ฒ„์ „ : 4.2.0.910310
  • IDE : Visual Studio 2019
  • ํ”Œ๋žซํผ ๋Œ€์ƒ ํ”„๋ ˆ์ž„ ์›Œํฌ :

    • iOS : 13.1, 13.2 (์•„๋งˆ ๋‹ค๋ฅธ ๋ฒ„์ „๋„ ๊ฐ€๋Šฅ)

๋ณต์ œ ๋งํฌ

BugExample.zip

collectionview high high impact iOS ๐ŸŽ bug

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. Collectionview ์šฉ ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ณ  Dispose ๋ฉ”์„œ๋“œ๋ฅผ ๋ฎ์–ด ์”๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

[์–ด์…ˆ๋ธ”๋ฆฌ : ExportRenderer (typeof (CollectionView), typeof (CustomCollectionViewRenderer))]
Project.iOS.Renderers ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค
{
๊ณต์šฉ ํด๋ž˜์Šค CustomCollectionViewRenderer : CollectionViewRenderer
{
๋ณดํ˜ธ ๋œ ์žฌ์ •์˜ void Dispose (bool disposing)
{
base.ItemsView.SelectedItem = null;
base.ItemsView.ItemsSource = null;
base.Dispose (์ฒ˜๋ถ„);
}
}
}

๋ชจ๋“  91 ๋Œ“๊ธ€

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

TabBar ์™€ ๋™์ผํ•œ ๋™์ž‘์ž…๋‹ˆ๋‹ค. ์ง„ํ–‰์ค‘์ธ ์กฐ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

AppShell.xaml



<!-- Your Pages -->
<TabBar Route="main">
    <Tab Title="Computers" Icon="computers.png" Route="computers">
        <ShellContent ContentTemplate="{DataTemplate computer:ComputersRootPage}" 
                      Title="Root"
                      Route="root"
                      />
    </Tab>
    <Tab Title="Favorites" Icon="favorites.png">
        <ShellContent ContentTemplate="{DataTemplate local:FavoritesPage}" />
    </Tab>
    <Tab Title="Active" Icon="active.png">
        <ShellContent ContentTemplate="{DataTemplate local:ActivePage}" />
    </Tab>
    <Tab Title="Users" Icon="users.png">
        <ShellContent ContentTemplate="{DataTemplate local:UsersPage}" />
    </Tab>
    <Tab Title="Account" Icon="account.png">
        <ShellContent ContentTemplate="{DataTemplate local:AccountPage}" />
    </Tab>
</TabBar>

๋””๋ฒ„๊ทธ ๋กœ๊ทธ

[UICollectionView] ์ž˜๋ชป๋œ ์—…๋ฐ์ดํŠธ : ์„น์…˜ 0์˜ ํ•ญ๋ชฉ ์ˆ˜๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ ํ›„ ๊ธฐ์กด ์„น์…˜์— ํฌํ•จ ๋œ ํ•ญ๋ชฉ์˜ ์ˆ˜ (1)๋Š” ์—…๋ฐ์ดํŠธ ์ „ ํ•ด๋‹น ์„น์…˜์— ํฌํ•จ ๋œ ํ•ญ๋ชฉ์˜ ์ˆ˜ (1)์™€ ๋™์ผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์„น์…˜์—์„œ ์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œ ๋œ ํ•ญ๋ชฉ ์ˆ˜ (์‚ฝ์ž… 1 ๊ฐœ, ์‚ญ์ œ 0 ๊ฐœ) ๋ฐ ํ•ด๋‹น ์„น์…˜ ์•ˆํŒŽ์œผ๋กœ ์ด๋™ ๋œ ํ•ญ๋ชฉ ์ˆ˜ (0 ๊ฐœ ์ด๋™, 0 ๊ฐœ ์ด๋™)๋ฅผ ๋”ํ•˜๊ฑฐ๋‚˜ ๋บ€ ๊ฐ’์ž…๋‹ˆ๋‹ค. -reloadData๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. UICollectionView ์ธ์Šคํ„ด์Šค :; ๋ ˆ์ด์–ด =; contentOffset : {0, -100}; contentSize : {414, 45}; adjustContentInset : {100, 0, 0, 0}; ํ˜•์„ธ:; dataSource :>; currentUpdate : [UICollectionViewUpdate-0x7fe2e5e1
c620 : ์ด์ „ :์ƒˆ๋กœ์šดํ•ญ๋ชฉ : <(
"๋‚˜ (0,0)"
)>]

์˜ˆ์™ธ ๋ฉ”์‹œ์ง€

์‚ญ์ œ ๋œ ๊ฐœ์ฒด์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ฐœ์ฒด ์ด๋ฆ„ : GroupableItemsViewController

ํ•œ ๋‹ฌ ๋™์•ˆ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์•ฑ ๊ฐœ์ •ํŒ์—์„œ ์ด์™€ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

iOS 12.4.1์—์„œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. AppCenter์—์„œ๋ณด๊ณ ํ•˜๋ฏ€๋กœ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ์ œํ•œ๋˜์–ด ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๊ฒƒ์„ ๊ฒฐ์ฝ” ์ ‘ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@BioTurboNick ์–ด๋–ค ๋ฒ„์ „์˜ Xamarin Forms๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ๋‹ˆ๊นŒ? ๋‹น์‹ ์˜ ๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ ๊ฒƒ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
์œ„์˜ ์˜ค๋ฅ˜๋Š” ์žฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฝ๊ณ  ํŽ˜์ด์ง€๋ฅผ ์ „ํ™˜ ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ  ์•„๋งˆ๋„ ๊ทธ๋ ‡๊ฒŒ. ๋‚˜๋Š” 4.2.0.848062์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์ง€๊ธˆ๊นŒ์ง€ GroupableItemsViewController์—์„œ ObjectDisposedException์„ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

4.2.0.9์—์„œ์ด ๋ฒ„๊ทธ๋ฅผ ํ…Œ์ŠคํŠธํ–ˆ๋Š”๋ฐ ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

XF SDK ๋ฒ„์ „ ๊ด€๋ จ : 4.3.0.947036 (์ตœ์‹  ์•ˆ์ •)

๊ด€๋ จ๋˜์–ด ์žˆ์ง€๋งŒ TabBar์—์„œ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค : https://github.com/xamarin/Xamarin.Forms/issues/8394

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ๊ทธ๋ฃนํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–‘์‹ ๋ฒ„์ „ 4.3

๋ฐ”๋‹ฅ ๊ธ€์ด์žˆ๋Š” ์ปฌ๋ ‰์…˜ ๋ทฐ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋‹ฅ ๊ธ€์„ ์ œ๊ฑฐํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

4.4.0.991265์—์„œ์ด ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. CollectionView์— ๋จธ๋ฆฌ๊ธ€์ด๋‚˜ ๋ฐ”๋‹ฅ ๊ธ€์ด์—†๊ณ  ์—ฌ์ „ํžˆ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

Untitled

๋‚˜๋Š” ๊ฐ„๋‹จํ•œ (๋‚ด ์ƒ๊ฐ์—) ์ปฌ๋ ‰์…˜ ๋ทฐ๋กœ์ด ๋ฒ„๊ทธ๋ฅผ ์–ป์—ˆ๊ณ  Xamarin Forms 4.4.0.991265๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ listview๊ฐ€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

  <CollectionView Grid.Row="0" ItemsSource="{Binding Currencies}" IsGrouped="False">
                <CollectionView.ItemsLayout>
                   <GridItemsLayout Orientation="Horizontal" />
                </CollectionView.ItemsLayout>
                <CollectionView.ItemTemplate>
                    <DataTemplate>
                        <Grid Padding="10">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="100" />
                                <RowDefinition Height="100" />
                            </Grid.RowDefinitions>
                            <Label Grid.Row="0" 
                                   Text="{Binding CCY}" 
                                   FontAttributes="Bold"
                                   FontFamily="AppleSDGothicNeo-UltraLight" 
                                   />
                            <Label Grid.Row="1"
                                   FontFamily="AppleSDGothicNeo-UltraLight" 

                                   TextColor="{Binding Path=Amount, Converter={StaticResource ValueToColorConverter}}"
                                   Text="{Binding ., Converter={StaticResource CurrencyConverter}}"

                                    />
                        </Grid>

                    </DataTemplate>
                </CollectionView.ItemTemplate>
        </CollectionView>

์ฒ˜์Œ์œผ๋กœ ๋ Œ๋”๋ง๋˜์ง€๋งŒ 'ํ•ซ ๋ฆฌ๋กœ๋“œ'๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

System.ObjectDisposedException : ์‚ญ์ œ ๋œ ๊ฐœ์ฒด์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ฐœ์ฒด ์ด๋ฆ„ : 'GroupableItemsViewController 1'. at Foundation.NSObject.get_SuperHandle () [0x00012] in /Library/Frameworks/Xamarin.iOS.framework/Versions/13.2.0.42/src/Xamarin.iOS/Foundation/NSObject2.cs:449 at UIKit.UIViewController.get_IsViewLoaded () [0x00023] in /Library/Frameworks/Xamarin.iOS.framework/Versions/13.2.0.42/src/Xamarin.iOS/UIViewController.g.cs:2075 at Xamarin.Forms.Platform.iOS.ObservableItemsSource.NotLoadedYet () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.iOS\CollectionView\ObservableItemsSource.cs:142 at Xamarin.Forms.Platform.iOS.ObservableItemsSource.Add (System.Collections.Specialized.NotifyCollectionChangedEventArgs args) [0x0000d] in D:\a\1\s\Xamarin.Forms.Platform.iOS\CollectionView\ObservableItemsSource.cs:147 at Xamarin.Forms.Platform.iOS.ObservableItemsSource.CollectionChanged (System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs args) [0x00023] in D:\a\1\s\Xamarin.Forms.Platform.iOS\CollectionView\ObservableItemsSource.cs:100 at (wrapper delegate-invoke) <Module>.invoke_void_object_NotifyCollectionChangedEventArgs(object,System.Collections.Specialized.NotifyCollectionChangedEventArgs) at System.Collections.ObjectModel.ObservableCollection 1 [T] .OnCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs e) [0x00018] in / Users / builder / jenkins / workspace / xamarin-macios / xamarin-macios / external / mono / external / corefx / src / System.ObjectModel / src / System / Collections / ObjectModel / ObservableCollection.cs : 263
/ Users / builder / jenkins / workspace / xamarin-macios / xamarin-macios /์˜ System.Collections.ObjectModel.ObservableCollection 1[T].OnCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedAction action, System.Object item, System.Int32 index) [0x00000] in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/external/mono/external/corefx/src/System.ObjectModel/src/System/Collections/ObjectModel/ObservableCollection.cs:338 at System.Collections.ObjectModel.ObservableCollection 1 [T] .InsertItem (System.Int32 ์ธ๋ฑ์Šค, T ํ•ญ๋ชฉ) [0x0001a]์—์„œ external / mono / external / corefx / src / System.ObjectModel / src / System / Collections / ObjectModel / ObservableCollection.cs : 196
System.Collections.ObjectModel.Collection`1 [T] .Add (T ํ•ญ๋ชฉ) [0x00020] in / Users / builder / jenkins / workspace / xamarin-macios / xamarin-macios / external / mono / external / corefx / src / Common / src / CoreLib / System / Collections / ObjectModel / Collection.cs : 71
/Users/chris/Projects/O/ViewModels/CashSummaryViewModel.cs:43์˜ O.ViewModels.CashSummaryViewModel.ExecueLoadItemsCommand (System.Boolean ForceRefresh) [0x00103]์—์„œ
2019 ๋…„

4.4.0.991265๋กœ ์—…๋ฐ์ดํŠธ ํ•œ ํ›„ ๋จธ๋ฆฌ๊ธ€์ด๋‚˜ ๋ฐ”๋‹ฅ ๊ธ€์ด์—†๋Š” ์ปฌ๋ ‰์…˜ ๋ทฐ์—์„œ๋„ ๋‹ค์‹œ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. :(

์ด ๋ฌธ์ œ๋ฅผ ๊ธด๊ธ‰ํ•˜๊ฒŒ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ๋˜ํ•œ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ํ”„๋กœ๋•์…˜์—์„œ ์…ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์œ„ํ—˜์œผ๋กœ ํ‘œ์‹œ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„
์•ฑ ์—ด๊ธฐ
์…ธ ํ”Œ๋ผ์ด ์•„์›ƒ์„ ์‚ฌ์šฉํ•˜์—ฌ 2 ํŽ˜์ด์ง€๋กœ ์ด๋™
์…ธ ํ”Œ๋ผ์ด ์•„์›ƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€ 1๋กœ ๋‹ค์‹œ ์ด๋™
-> ์•ฑ์ด ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค

๊ฐ™์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@jsiemens๊ฐ€ ๋งํ•œ ๊ฒƒ ๐Ÿ‘†

๋จธ๋ฆฌ๊ธ€๊ณผ ๋ฐ”๋‹ฅ ๊ธ€์ด ์žˆ๊ฑฐ๋‚˜์—†๋Š” collectionview์—์„œ๋„์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Xamarin.Forms 4.4.0.991640 ์‚ฌ์šฉ

@hartez ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ iOS์—์„œ ์‰˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“œ๋Š” ์ค‘์š”ํ•œ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ฒ„๊ทธ๊ฐ€์žˆ๋Š” ์•ฑ์„ ๊ฒŒ์‹œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค .... ์ˆ˜์ • ํ•ด์ฃผ์„ธ์š”!

์—ฌ๊ธฐ์—๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๊ฐ™์€ ๋ฌธ์ œ

์…ธ, ๋จธ๋ฆฌ๊ธ€ ๋ฐ ๋ฐ”๋‹ฅ ๊ธ€์ด์—†๋Š” 4.4.0.991640์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‚ด๊ฐ€ ์ƒ์ƒํ•˜๋Š” CarouselView๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ž, Xamarin ํŒ€ ... 5 ๊ฐœ์›” ๋™์•ˆ ํ”„๋กœ๋•์…˜์—์„œ ์ถฉ๋Œํ•˜๋Š” ๋ฒ„๊ทธ๊ฐ€์žˆ๋Š” ๊ฒƒ์ด ์ •๋ง ํ—ˆ์šฉ๋ฉ๋‹ˆ๊นŒ?

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ

4.5 ์ด์ „์—๋Š”์ด โ€‹โ€‹๋ฒ„๊ทธ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
4.5๋กœ ์—…๋ฐ์ดํŠธ ํ•œ ํ›„์ด ๋ฒ„๊ทธ๋Š” CollectionView (์…ธ ์—†์Œ)์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Hot-Reload์™€ ๋™์ผํ•œ ๋ฌธ์ œ :
์ œ ๊ฒฝ์šฐ์—๋Š” ListView

๋ณด๊ธฐ:
`


    <StackLayout>
        <ListView x:Name="LvAbwesenheiten" BackgroundColor="Transparent" 
                  HasUnevenRows="True" 
                  ItemTemplate="{StaticResource AbwesenheitTemplateSelector}"
                  SeparatorVisibility="None"
                  />
  </StackLayout>

`

ViewCell (ํ…œํ”Œ๋ฆฟ) :
` xmlns : x = "http://schemas.microsoft.com/winfx/2009/xaml"
x : Class = "DATAflor.Team.DFViews.Urlaub.CustomCells.AbwesenheitCell">

    <StackLayout x:Name="StackLayoutMain" 
                 Orientation="Horizontal" 
                 HorizontalOptions="Fill" 
                 Padding="10" 

                 >
        <StackLayout.Resources>
            <Style x:Key="LabelStyleZeitraum" TargetType="Label">
                <Setter Property="TextColor" Value="{DynamicResource TextOnBackgroundColor}"/>
                <Setter Property="FontSize" Value="15"/>
            </Style>
            <Style x:Key="LabelStyleText" TargetType="Label">
                <Setter Property="TextColor" Value="{DynamicResource TextOnBackgroundColor}"/>
                <Setter Property="FontSize" Value="13"/>
            </Style>
        </StackLayout.Resources>
        <!--BackgroundColor="{Binding Path=BackgroundColor}"-->

        <StackLayout Orientation="Vertical" HorizontalOptions="FillAndExpand">

            <StackLayout Orientation="Horizontal">
                <Label Text="{Binding Von, StringFormat='{0:dd.MM.yyyy}'}" Style="{StaticResource LabelStyleZeitraum}" />
                <Label Text=" - " Style="{StaticResource LabelStyleZeitraum}"/>
                <Label Text="{Binding Bis, StringFormat='{0:dd.MM.yyyy}'}" Style="{StaticResource LabelStyleZeitraum}"/>
            </StackLayout>

            <Label Text="{Binding Text}" 
                   Style="{StaticResource LabelStyleText}"
                   />


        </StackLayout>



    </StackLayout>
</ViewCell.View>

`

ํ…œํ”Œ๋ฆฟ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ์ €์žฅ์„ ๋ˆŒ๋Ÿฌ ํ•ซ ๋ฆฌ๋กœ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค (์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋‚ด๋ถ€์˜ iOS 13, ์‹ค์ œ ์žฅ์น˜์˜ ๊ฒฝ์šฐ iOS 12).

๋ชจ๋“  Listview / Template์—์„œ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ์ง€ ๋˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค ... ์ง€๊ธˆ๊นŒ์ง€๋Š” ์„ฑ๊ฐ€ ์‹œ์ง€๋งŒ ์ค‘์š”ํ•˜์ง€๋Š” ์•Š์€ Hot-Reload์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ •์ƒ์ ์ธ ๋Ÿฐํƒ€์ž„์— ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ Stack-Trace์ž…๋‹ˆ๋‹ค.

`์‚ญ์ œ ๋œ ๊ฐœ์ฒด์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ฐœ์ฒด ์ด๋ฆ„ : 'DefaultRenderer'.

/Library/Frameworks/Xamarin.iOS.framework/Versions/13.8.3.0/src/Xamarin.iOS/Foundation/NSObject2.cs:449์˜ Foundation.NSObject.get_SuperHandle () [0x00012]
/Library/Frameworks/Xamarin.iOS.framework/Versions/13.8.3.0/src/Xamarin.iOS/UIView.g.cs:3684์˜ UIKit.UIView.set_Frame (CoreGraphics.CGRect ๊ฐ’) [0x00024]์—์„œ
Xamarin.Forms.Platform.iOS.ViewCellRenderer + ViewTableCell.LayoutSubviews () [0x000a5] D : \ a \ 1 \ s \ Xamarin.Forms.Platform.iOS \ Cells \ ViewCellRenderer.cs : 103
at (๋ž˜ํผ ๊ด€๋ฆฌ ๋Œ€์ƒ) ObjCRuntime.Messaging.void_objc_msgSend_IntPtr_Int64 (intptr, intptr, intptr, long)
/Library/Frameworks/Xamarin.iOS.framework/Versions/13.8.3.0/src/Xamarin.iOS/UITableView.g์˜ UIKit.UITableView.ReloadRows (Foundation.NSIndexPath [] atIndexPaths, UIKit.UITableViewRowAnimation withRowAnimation) [0x0002a]์—์„œ. cs : 824
Xamarin.Forms.Platform.iOS.CellRenderer + <> c__DisplayClass8_0์—์„œ.b__0 (System.Object ๋ณด๋‚ธ ์‚ฌ๋žŒ, System.EventArgs e) D : \ a \ 1 \ s \ Xamarin.Forms.Platform.iOS \ Cells \ CellRenderer.cs : 106์˜ [0x00032]
at Xamarin.Forms.Cell.OnForceUpdateSizeRequested () [0x00076] in D : \ a \ 1 \ s \ Xamarin.Forms.Core \ Cells \ Cell.cs : 234`

๋‚˜๋Š” ๋˜ํ•œ ๋‚ด ์•ฑ ์—์„œ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด์ด์ง€ ์•Š๋Š” boxview ๋†’์ด๊ฐ€ 100 ์ธ ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ collectionview์˜ ๋ฐ”๋‹ฅ ๊ธ€์„ ์ œ๊ฑฐํ•˜๋ฉด (๋ณด๊ธฐ ํ•˜๋‹จ์— ์•ฝ๊ฐ„์˜ ๊ณต๊ฐ„์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด) ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
์ž˜ ์ž‘๋™ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‰˜ ํŽ˜์ด์ง€์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”Œ๋ผ์ด ์•„์›ƒ ํ•ญ๋ชฉ ์ •์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋ผ์ด ์•„์›ƒ ํ•ญ๋ชฉ ์ •์˜๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด์ด ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์…ธ ์ฝ˜ํ…์ธ ๊ฐ€ ํ•˜๋‚˜์˜ ํ”Œ๋ผ์ด ์•„์›ƒ ํ•ญ๋ชฉ์— ํฌํ•จ๋˜๋„๋ก ์…ธ ํ”Œ๋ผ์ด ์•„์›ƒ์„ ๋””์ž์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

@Genfood ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฌธ์ œ๋Š” ItemsPage์˜ collectionview ํ—ค๋”์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฑฐํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€๋งŒ ํ—ค๋”๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ์ถฉ๋Œํ•˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ํ•  ์ˆ˜์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์ผ์€ ๋ชจ๋“  ํ”Œ๋ผ์ด ์•„์›ƒ ํ•ญ๋ชฉ์„ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ถˆ์พŒํ•œ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@samhouts ์ˆ˜์ • ์‚ฌํ•ญ์€ ์–ธ์ œ ์ถœ์‹œ๋ฉ๋‹ˆ๊นŒ?

@ g4mb10r https://github.com/xamarin/Xamarin.Forms/releases/tag/beta-4.6.0-pre4.2 ์—์„œ ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์Šต๋‹ˆ๋‹ค

@samhouts ๋ฐฉ๊ธˆ ํ•ด๋‹น ๋ฒ„์ „์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์ง€์†๋ฉ๋‹ˆ๋‹ค.

System.ObjectDisposedException
Message = ์‚ญ์ œ ๋œ ๊ฐœ์ฒด์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ฐœ์ฒด ์ด๋ฆ„ : 'WkWebViewRenderer'.

๋‚˜๋„ ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค

@samhouts ์ด๊ฒƒ์€ ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ ์ถœ์‹œ ๋œ 4.6 ์•ˆ์ •์—์„œ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ˆ˜์ • ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๐ŸŽ‰
์ ์–ด๋„์ด ๋ฌธ์ œ์— ์ฒจ๋ถ€ ํ•œ ๋ฒ„๊ทธ ์˜ˆ์ œ๋Š” ์ด์ œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@samhouts CollectionView๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ์ˆ˜์ •๋˜์—ˆ์ง€๋งŒ WebView๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊นจ์กŒ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋‹ค๋ฅธ ๋ช‡ ๋ช…์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@samhouts ๋ฐฉ๊ธˆ ํ•ด๋‹น ๋ฒ„์ „์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์ง€์†๋ฉ๋‹ˆ๋‹ค.

System.ObjectDisposedException
Message = ์‚ญ์ œ ๋œ ๊ฐœ์ฒด์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ฐœ์ฒด ์ด๋ฆ„ : 'WkWebViewRenderer'.

@ g4mb10r ์›๋ž˜ ๊ฒŒ์‹œ ๋œ ๋ฌธ์ œ์™€ ๋‹ค๋ฅธ ์ปจํŠธ๋กค์˜ ๋‹ค๋ฅธ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ObjectDisposedExceptions์—๋Š” ๋งŽ์€ ์›์ธ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์ •๋ณด (WkWebviewRenderer๋ผ๋Š” ๊ฒƒ)๋กœ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด๊ณ  ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๋‹ค๋ฅธ ์ •๋ณด (๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์Šคํƒ ์ถ”์ , ์žฌํ˜„ ํ”„๋กœ์ ํŠธ)๋ฅผ ํฌํ•จํ•˜์‹ญ์‹œ์˜ค.

@samhouts v1.6์˜ CollectionViews์—์„œ ์—ฌ์ „ํžˆ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ถ”์ ์ž…๋‹ˆ๋‹ค.

/Library/Frameworks/Xamarin.iOS.framework/Versions/13.18.2.1/src/Xamarin.iOS/Foundation/NSObject2.cs:449์˜ Foundation.NSObject.get_SuperHandle () [0x00012]

/Library/Frameworks/Xamarin.iOS.framework/Versions/13.18.2.1/src/Xamarin.iOS/UIView.g.cs:3685์˜ UIKit.UIView.set_Frame (CoreGraphics.CGRect ๊ฐ’) [0x00024]์—์„œ

Xamarin.Forms.Platform.iOS.ItemsViewController`1 [TItemsView] .LayoutEmptyView () [0x0000f]์—์„œ D : \ a \ 1 \ s \ Xamarin.Forms.Platform.iOSCollectionViewItemsViewController.cs : 318

Xamarin.Forms.Platform.iOS.ItemsViewController`1 [TItemsView] .ViewWillLayoutSubviews () [0x00046] D : \ a \ 1 \ s \ Xamarin.Forms.Platform.iOSCollectionViewItemsViewController.cs : 161

Xamarin.Forms.Platform.iOS.StructuredItemsViewController`1 [TItemsView] .ViewWillLayoutSubviews () [0x00000] D : \ a \ 1 \ s \ Xamarin.Forms.Platform.iOSCollectionView \ StructuredItemsViewController.cs : 78

(๋ž˜ํผ์—์„œ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ๊ด€๋ฆฌ ๋จ) UIKit.UIApplication.UIApplicationMain (int, string [], intptr, intptr)

/Library/Frameworks/Xamarin.iOS.framework/Versions/13.18.2.1/src/Xamarin.iOS์˜ UIKit.UIApplication.Main (System.String [] args, System.IntPtr principal, System.IntPtr delegate) [0x00005]์—์„œ /UIKit/UIApplication.cs:86

/Library/Frameworks/Xamarin.iOS.framework/Versions/13.18.2.1/src/Xamarin.iOS์˜ UIKit.UIApplication.Main (System.String [] args, System.String principalClassName, System.String delegateClassName) [0x0000e]์—์„œ /UIKit/UIApplication.cs:65

C : \ Code \ Logbook \ Logbook \ Logbook.iOS \ Main.cs : 17์˜ Logbook.iOS.Application.Main (System.String [] args) [0x00001]

๋ฌธ์ œ์˜ ์›์ธ์„ ์ •ํ™•ํžˆ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์ง€๋งŒ Shell์„ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋ผ์ด ์•„์›ƒ ํ•ญ๋ชฉ ๋‚ด์˜ ์—ฌ๋Ÿฌ ํƒญ์— CollectionViews๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ CollectionView๋Š” ๊ทธ๋ฃน ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

CollectionView๋กœ ํƒญ์„๋กœ๋“œํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์€ ๋‹ค์Œ ๋‘ ๋ฒˆ์งธ ํƒญ๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ถฉ๋Œ์€ ์ด์ „์— ๋ณธ ๊ฒƒ์œผ๋กœ ๋‹ค์‹œ ํƒ์ƒ‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ์—์„œ ๋ณต์ œํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Android์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ํ•˜๋‹ค

์›์ธ์„ ์ฐพ์€ ๊ฒƒ ๊ฐ™์•„์„œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ # 10953์„ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ์›๋ณธ ํฌ์Šคํ„ฐ์˜ ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ iOS์˜ v4.7.0.1080์—์„œ ์—ฌ์ „ํžˆ ๊นจ์กŒ์Šต๋‹ˆ๋‹ค. Android๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

3x CollectionViews 3x ๋‹ค๋ฅธ ํŽ˜์ด์ง€, ๋จธ๋ฆฌ๊ธ€ ๋˜๋Š” ๋ฐ”๋‹ฅ ๊ธ€ ์—†์Œ. Shell์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ผ๋ฐ˜ ContentPages ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Hot-Reload ์—ฌ๋ถ€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ปฌ๋ ‰์…˜ ๋ทฐ ์ธ๊ตฌ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ ๊ณ ์น˜๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ collectionview ๊ตฌํ˜„ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ObservableCollection์ด ์ง€์›Œ์ง„ ๋‹ค์Œ ๋‹ค์‹œ ์ฑ„์›Œ์งˆ ๋•Œ ๋ชจ๋‘ ์ •ํ™•ํžˆ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ฑฐ์˜ 9 ๊ฐœ์›” ํ›„์—๋„ ์—ฌ์ „ํžˆ ์ง€๋ฃจํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฏฟ์„ ์ˆ˜ ์—†๋‹ค.

์ด๊ฒƒ์ด ๋‹ซํ˜”์ง€๋งŒ ์ˆ˜์ •๋˜์ง€ ์•Š์€ ํ›„ ์—ฌ๊ธฐ์— ์˜ค๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋„์›€์ด๋œ๋‹ค๋ฉด, ์ง€์šฐ๊ธฐ์™€ ๋‹ค์‹œ ์ฑ„์šฐ๊ธฐ ์‚ฌ์ด์— ๋งค์šฐ ์งง์€ ์ง€์—ฐ (> 100ms)์„ ๋„์ž…ํ•˜๋ฉด ๋„์›€์ด๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฌผ๊ฑด์„ '์ˆ˜์ •'ํ•˜๊ธฐ ์œ„ํ•ด ์ง€์—ฐ์„ ๋„์ž…ํ•˜๋Š” ํŒฌ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ฐฉ๋ฒ• (์˜ˆ : while observablecollection.count > 0 do observablecollection.removeat(0) )์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์šฐ๊ณ  ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๋‹ค์‹œ ์ฑ„์šฐ๋ ค ๊ณ ํ•˜๋ฉด SemaphoreSlim์—์„œ ๋‹ค๋ฅธ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

System.Threading.SemaphoreFullException: Adding the specified count to the semaphore would cause it to exceed its maximum

๋™์ผํ•œ @wislon โ˜น๏ธ, iOS v12.4์—์„œ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ v13.5์—์„œ๋Š” ํ˜ธ๊ฐ์—†์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ตœ์‹  ์ •๋ณด:

๋ฒ„์ „ Xamarin.Forms 4.6.0.1180 ์ด ๋ฒ„๊ทธ๋ฅผ iOS v12.4์—์„œ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

IOS 12.4.5๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ตœ์‹  ๋ฒ„์ „์˜ Xamarin.Forms๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

iOS 12.4.1 (13.x ์•„๋‹˜) ๋ฐ Xamarin.Forms 4.7์„ ์‹คํ–‰ํ•˜์—ฌ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋ฒ„๊ทธ๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”.

@robintschroeder , @ daves1992 BugExample ์„ ์‚ฌ์šฉํ•˜์—ฌ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@rmarinho ์˜ˆ, 12.4.5๋ฅผ ์‹คํ–‰ํ•˜๋Š” Iphone 6์—์„œ ๋ฐฉ๊ธˆ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ ์ฒ˜์Œ์œผ๋กœ BugExample์„ ์‚ฌ์šฉํ•˜์—ฌ ์žฌํ˜„ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

System.ObjectDisposedException : '์‚ญ์ œ ๋œ ๊ฐœ์ฒด์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ฐœ์ฒด ์ด๋ฆ„ : 'GroupableItemsViewController`1'. '

iOS 12.2 Simulator์—์„œ 4.8๋กœ ํ…Œ์ŠคํŠธ ํ•œ ๊ฒฐ๊ณผ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ์ž˜๋ชป์€ ์ƒ˜ํ”Œ์—์„œ Xamarin.Forms๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” 4.8๋กœ ์—…๋ฐ์ดํŠธํ–ˆ๊ณ , ๊ทธ ์ดํ›„๋กœ ์ƒ˜ํ”Œ์ด๋‚˜ ๋‚ด ์•ฑ์—์„œ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค .... ์ดํ‹€์— ๋งค๋ฒˆ ์žฌํ˜„๋˜์ง€ ์•Š์•˜๊ณ  4.7.X์—์„œ 100 % ์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์† ์ฃผ์‹œํ•˜์‹ญ์‹œ์˜ค.

๋ฒ„๊ทธ๋Š” xamarin 4.8 (iphone 6, ios 12.4.6)์— ์—ฌ์ „ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

@rkarban ๋ ˆํฌ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฐฉ๊ธˆ ํ…Œ์ŠคํŠธํ–ˆ๋Š”๋ฐ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

@rmarinho ๋ถˆํ–‰ํžˆ๋„ ์ €์žฅ์†Œ๋Š” ๋น„๊ณต๊ฐœ์ด๋ฉฐ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธฐ ์Šคํƒ ์ถ”์ ์ž…๋‹ˆ๋‹ค
NSObject.get_SuperHandle ()
UICollectionViewController.get_CollectionView ()
ItemsViewController`1 [TItemsView] .GetPrototype ()
ItemsViewLayout.DetermineCellSize ()
ListViewLayout.ConstrainTo (CoreGraphics.CGSize ํฌ๊ธฐ)
ItemsViewLayout.UpdateConstraints (CoreGraphics.CGSize ํฌ๊ธฐ)
ItemsViewLayout.InvalidateLayout ()
(๋ž˜ํผ ๊ด€๋ฆฌ-๋„ค์ดํ‹ฐ๋ธŒ) UIKit.UIApplication.UIApplicationMain (int, string [], intptr, intptr)
UIApplication.Main (System.String [] args, System.IntPtr ๋ณด์•ˆ ์ฃผ์ฒด, System.IntPtr ๋Œ€๋ฆฌ์ž)
UIApplication.Main (System.String [] args, System.String principalClassName, System.String delegateClassName)
Application.Main (System.String [] ์ธ์ˆ˜)

BugExample.zip

@rmarinho ์ƒ˜ํ”Œ์„ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ณต์ œํ–ˆ์Šต๋‹ˆ๋‹ค.

Items ์†์„ฑ์„ ์„ค์ •ํ•˜๋Š” ๋ฐ 100ms ์ง€์—ฐ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„์ดํฐ 6
IOS 12.4.5
Xamarin.Forms 4.8

    ObservableCollection<string> items;

    public ObservableCollection<string> Items
    {
        get { return items; }
        set 
        {
            SetProperty(ref items, value);
        }
    }

    public Command LoadItemsCommand { get; set; }

    public ItemsViewModel()
    {
        Title = "Browse";
        _= getItems();
    }

    async Task getItems()
    {
        await Task.Delay(100);
        Items = new ObservableCollection<string>
        {
            "Test",
            "Test",
            "Test",
            "Test",
            "Test",
        };
    }

Xamarin Forms 4.8์—์„œ๋„ ios 12์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Collectionview๊ฐ€ ์ด๋Ÿฌํ•œ ์žฅ์น˜์—์„œ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. Collectionview ์šฉ ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ณ  Dispose ๋ฉ”์„œ๋“œ๋ฅผ ๋ฎ์–ด ์”๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

[์–ด์…ˆ๋ธ”๋ฆฌ : ExportRenderer (typeof (CollectionView), typeof (CustomCollectionViewRenderer))]
Project.iOS.Renderers ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค
{
๊ณต์šฉ ํด๋ž˜์Šค CustomCollectionViewRenderer : CollectionViewRenderer
{
๋ณดํ˜ธ ๋œ ์žฌ์ •์˜ void Dispose (bool disposing)
{
base.ItemsView.SelectedItem = null;
base.ItemsView.ItemsSource = null;
base.Dispose (์ฒ˜๋ถ„);
}
}
}

์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. Collectionview ์šฉ ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ณ  Dispose ๋ฉ”์„œ๋“œ๋ฅผ ๋ฎ์–ด ์”๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

[์–ด์…ˆ๋ธ”๋ฆฌ : ExportRenderer (typeof (CollectionView), typeof (CustomCollectionViewRenderer))]
Project.iOS.Renderers ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค
{
๊ณต์šฉ ํด๋ž˜์Šค CustomCollectionViewRenderer : CollectionViewRenderer
{
๋ณดํ˜ธ ๋œ ์žฌ์ •์˜ void Dispose (bool disposing)
{
base.ItemsView.SelectedItem = null;
base.ItemsView.ItemsSource = null;
base.Dispose (์ฒ˜๋ถ„);
}
}
}

๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์‹œ๋„ ํ•  ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จํ•˜์—ฌ ์—„์ฒญ๋‚œ ์–‘์˜ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. Collectionview ์šฉ ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ณ  Dispose ๋ฉ”์„œ๋“œ๋ฅผ ๋ฎ์–ด ์”๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

[์–ด์…ˆ๋ธ”๋ฆฌ : ExportRenderer (typeof (CollectionView), typeof (CustomCollectionViewRenderer))]
Project.iOS.Renderers ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค
{
๊ณต์šฉ ํด๋ž˜์Šค CustomCollectionViewRenderer : CollectionViewRenderer
{
๋ณดํ˜ธ ๋œ ์žฌ์ •์˜ void Dispose (bool disposing)
{
base.ItemsView.SelectedItem = null;
base.ItemsView.ItemsSource = null;
base.Dispose (์ฒ˜๋ถ„);
}
}
}

์ผ๋ถ€ ์˜์›…์€ ๋งํ† ๋ฅผ ์ž…์ง€ ์•Š์Šต๋‹ˆ๋‹ค

@rmarinho @samhouts ์ด ๋ฒ„๊ทธ๋ฅผ ๋‹ค์‹œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์œ„์˜ ์ƒ˜ํ”Œ์˜ ์กฐ์ • ๋œ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ๋ณต์ œ ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ตœ์‹  Forms์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์…ธ, ๋จธ๋ฆฌ๊ธ€ ๋˜๋Š” ๋ฐ”๋‹ฅ ๊ธ€ ์—†์Œ.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ iOS 12.4.8์„ ์‹คํ–‰ํ•˜๋Š” iPad ๋ฐ iOS 12.4.1์„ ์‹คํ–‰ํ•˜๋Š” iPhone์˜ ListView๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ iOS 13์˜ ์žฅ์น˜์—์„œ๋Š” ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. iOS 13.4๋ฅผ ๋Œ€์ƒ์œผ๋กœํ•˜๋Š” Xamarin Forms 4.7 SR5๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Xamarin Exception Stack:
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'GroupableItemsViewController`1'.
  at Foundation.NSObject.get_SuperHandle () <0x101941484 + 0x0009c> in <698888335fd24bdca1317448cda6f409#1ffb13f9a443e65aad81d66c194bad70>:0
  at UIKit.UICollectionViewController.get_CollectionView () <0x10191f038 + 0x0002f> in <698888335fd24bdca1317448cda6f409#1ffb13f9a443e65aad81d66c194bad70>:0
  at Xamarin.Forms.Platform.iOS.ItemsViewController`1[TItemsView].GetPrototype () <0x101e787f0 + 0x00113> in <c02bcffd65214bdd87ba2c816440c864#1ffb13f9a443e65aad81d66c194bad70>:0
  at Xamarin.Forms.Platform.iOS.ItemsViewLayout.DetermineCellSize () <0x101e7fde0 + 0x000a3> in <c02bcffd65214bdd87ba2c816440c864#1ffb13f9a443e65aad81d66c194bad70>:0
  at Xamarin.Forms.Platform.iOS.ListViewLayout.ConstrainTo (CoreGraphics.CGSize size) <0x101e80efc + 0x00037> in <c02bcffd65214bdd87ba2c816440c864#1ffb13f9a443e65aad81d66c194bad70>:0
  at Xamarin.Forms.Platform.iOS.ItemsViewLayout.UpdateConstraints (CoreGraphics.CGSize size) <0x101e7f944 + 0x0006b> in <c02bcffd65214bdd87ba2c816440c864#1ffb13f9a443e65aad81d66c194bad70>:0
  at Xamarin.Forms.Platform.iOS.ItemsViewLayout.InvalidateLayout () <0x101e80ac0 + 0x00043> in <c02bcffd65214bdd87ba2c816440c864#1ffb13f9a443e65aad81d66c194bad70>:0
  at (wrapper managed-to-native) UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr)
  at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) <0x1018fa618 + 0x0003f> in <698888335fd24bdca1317448cda6f409#1ffb13f9a443e65aad81d66c194bad70>:0
  at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) <0x1018fa570 + 0x00053> in <698888335fd24bdca1317448cda6f409#1ffb13f9a443e65aad81d66c194bad70>:0
  at FieldEdge.Mobile.Tablet.iOS.Application.Main (System.String[] args) <0x10054cbf8 + 0x00033> in <ca210f5f974b45669b487b30759435fc#1ffb13f9a443e65aad81d66c194bad70>:0

ListView์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@ rd09 ListView๋Š” GroupableItemsViewController๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. CollectionView๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@ rd09 ListView๋Š” GroupableItemsViewController๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. CollectionView๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๋จธ๋ฆฌ๋ฅผ ์˜ฌ๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–ด๋–ป๊ฒŒ ๋“  ๊ฐ€์ •ํ–ˆ์ง€๋งŒ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ํ™•์ธํ•œ ํ›„ @ l0gaw๊ฐ€ ๊ฒŒ์‹œ ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์œผ๋ฉฐ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

@ l0gaw ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด์ „์— ๋ณด์•˜๋˜ ์ถฉ๋Œ์ด ์ˆ˜์ •๋˜์—ˆ์ง€๋งŒ ์ด์ œ๋Š” ๋™์ผํ•œ ์˜ˆ์™ธ๊ฐ€ ์žˆ์ง€๋งŒ ์Šคํƒ ์ถ”์ ์ด ๋‹ค๋ฅธ ๋‹ค๋ฅธ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'GroupableItemsViewController`1'.
  at Foundation.NSObject.get_SuperHandle () <0x101d8f3c0 + 0x0009c> in <698888335fd24bdca1317448cda6f409#b6c34173f62d398ef7bfb32c87027461>:0
  at UIKit.UIViewController.get_IsViewLoaded () <0x101d671f4 + 0x0000f> in <698888335fd24bdca1317448cda6f409#b6c34173f62d398ef7bfb32c87027461>:0
  at Xamarin.Forms.Platform.iOS.ObservableItemsSource.ReloadRequired () <0x1022cfc28 + 0x00017> in <f363ad1ddcfd4686ace46d6cfc5b07cf#b6c34173f62d398ef7bfb32c87027461>:0
  at Xamarin.Forms.Platform.iOS.ObservableItemsSource.Remove (System.Collections.Specialized.NotifyCollectionChangedEventArgs args) <0x1022d0e9c + 0x0013b> in <f363ad1ddcfd4686ace46d6cfc5b07cf#b6c34173f62d398ef7bfb32c87027461>:0
  at Xamarin.Forms.Platform.iOS.ObservableItemsSource.CollectionChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs args) <0x1022d00a8 + 0x001bf> in <f363ad1ddcfd4686ace46d6cfc5b07cf#b6c34173f62d398ef7bfb32c87027461>:0
  at Xamarin.Forms.Platform.iOS.ObservableItemsSource.CollectionChanged (System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs args) <0x1022007b0 + 0x00417> in <f363ad1ddcfd4686ace46d6cfc5b07cf#b6c34173f62d398ef7bfb32c87027461>:0
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) <0x100c355e8 + 0x0005b> in <624bcc4ce53347508a7b8fa821d78da4#b6c34173f62d398ef7bfb32c87027461>:0
  at Foundation.NSAsyncSynchronizationContextDispatcher.Apply () <0x101d8d5fc + 0x0002f> in <698888335fd24bdca1317448cda6f409#b6c34173f62d398ef7bfb32c87027461>:0
  at (wrapper managed-to-native) UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr)
  at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) <0x101d48708 + 0x0003f> in <698888335fd24bdca1317448cda6f409#b6c34173f62d398ef7bfb32c87027461>:0
  at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) <0x101d48660 + 0x00053> in <698888335fd24bdca1317448cda6f409#b6c34173f62d398ef7bfb32c87027461>:0
  at FieldEdge.Mobile.Tablet.iOS.Application.Main (System.String[] args) <0x1009aa488 + 0x00033> in <044acf8dc1f745b3bc6b51b04b6a2bae#b6c34173f62d398ef7bfb32c87027461>:0

iOS 12์—์„œ๋งŒ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ ์ง€๊ธˆ๊นŒ์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

iPad์—๋„์ด ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž ๋งˆ๋ฆฐ 4.7
  • iOS 13.5.1

SIGABRT : ์‚ญ์ œ ๋œ ๊ฐœ์ฒด์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

NSObject.get_SuperHandle ()
UIViewController.get_NavigationItem ()
NavigationRenderer+<>c__DisplayClass79_0.<SetMasterLeftBarButton>b__0 (UIKit.UIImage icon)
ImageElementManager.ApplyNativeImageAsync (Xamarin.Forms.BindableObject bindable, Xamarin.Forms.BindableProperty imageSourceProperty, System.Action`1[T] onSet, System.Action`1[T] onLoading, System.Threading.CancellationToken cancellationToken)
NavigationRenderer.SetMasterLeftBarButton (UIKit.UIViewController containerController, Xamarin.Forms.MasterDetailPage masterDetailPage)
AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state)
NSAsyncSynchronizationContextDispatcher.Apply ()
(wrapper managed-to-native) UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr)
UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate)
UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName)
Application.Main (System.String[] args)

์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. Collectionview ์šฉ ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ณ  Dispose ๋ฉ”์„œ๋“œ๋ฅผ ๋ฎ์–ด ์”๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

[์–ด์…ˆ๋ธ”๋ฆฌ : ExportRenderer (typeof (CollectionView), typeof (CustomCollectionViewRenderer))]
Project.iOS.Renderers ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค
{
๊ณต์šฉ ํด๋ž˜์Šค CustomCollectionViewRenderer : CollectionViewRenderer
{
๋ณดํ˜ธ ๋œ ์žฌ์ •์˜ void Dispose (bool disposing)
{
base.ItemsView.SelectedItem = null;
base.ItemsView.ItemsSource = null;
base.Dispose (์ฒ˜๋ถ„);
}
}
}

@ l0gaw iOS ํ”„๋กœ์ ํŠธ์—์„œ CustomRenderer ๋งŒ ๊ตฌํ˜„ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋ฉ”์ธ ํ”„๋กœ์ ํŠธ์—์„œ ๋‹ค๋ฅธ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

@matheuscschenfeld iOS ํ”„๋กœ์ ํŠธ์—์„œ

๋˜ํ•œ์ด ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•˜์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ํ•˜๋‹ค
๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. viewmodel ๋ช…๋ น ๋Œ€์‹  ๋ชจ๋ธ ๋ช…๋ น์— ๋ฐ”์ธ๋”ฉ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ”์ธ๋”ฉ์€ ๋ทฐ ๋ชจ๋ธ๊ฐ„์— ์ „ํ™˜ ํ•  ๋•Œ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒˆ viewmodel ์†Œ์Šค์—์„œ ์ปฌ๋ ‰์…˜ ํ•ญ๋ชฉ์„ ๋‹ซ๋Š” ๋Œ€์‹  ์ด๋ฏธ ์‚ญ์ œ ๋œ ์ปฌ๋ ‰์…˜์—์„œ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋ธ ๋Œ€์‹  ๋ทฐ ๋ชจ๋ธ์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ์„ ๋ณ€๊ฒฝํ•  ๋•Œ ๋” ์ด์ƒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

SelectedItem์„ null๋กœ ์„ค์ •ํ•˜๋Š” ์ค„์ด SelectedItem ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ฏ€๋กœ ๊ฒŒ์‹œ ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ์ฃผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์†์„ฑ์— ์–‘๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ์ด ์„ค์ •๋˜์–ด ์žˆ๊ณ  null์„ ํ™•์ธํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ ์ค„์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@samhouts ์ด๊ฒƒ์ด ๊ณง ์„ ํƒ ๋ ์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ. Listview์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์–‘์‹ ๋ฒ„์ „ 4.7.0.1080

๋‚˜๋Š” ์ด๊ฒƒ์ด Xamarin.Forms 5.x์—์„œ ์ˆ˜์ •๋˜๊ฑฐ๋‚˜ MAUI๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ‹€ ๋ ธ์œผ๋ฉด ์ข‹๊ฒ ์–ด

iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์˜ Xamarin 4.8์—์„œ๋„์ด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@samhouts @hartez ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์—ฌ์ „ํžˆ์ด ๋‹ค์†Œ ํฐ ๋ฒ„๊ทธ๋ฅผ๋ณด๊ณ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ„๊ทธ์˜ ๋ฒ”์œ„๋Š” ์‹ค์ œ ๋ฌธ์ œ๋ฅผ ์š”์•ฝํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์ž‘์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•„์ง ์ˆ˜์ •๋˜์ง€ ์•Š์€ ๊ฒƒ์ด ์ธ์ƒ์ ์ž…๋‹ˆ๋‹ค.์ด ๋ฒ„๊ทธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. CollectionView๋Š” iOS์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@ l0gaw ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ž‘๋™ํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ iOS ์—…๋ฐ์ดํŠธ์ธ์ง€ ์•„๋‹Œ์ง€๋Š” ์•Œ ์ˆ˜ ์—†์ง€๋งŒ ์ •๋ง ์งœ์ฆ๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์—…๋ฐ์ดํŠธ / ์ง€์šฐ๊ธฐ๋กœ ๋ชจ๋“  ๊ณณ์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@mduchev ๋‚˜๋Š”

๊ตฌ์ฒด์ ์œผ๋กœ ์ง€๊ธˆ ๋‚ด๊ฐ€ ๋ณด๋Š” ์Šคํƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

NSObject.get_SuperHandle ()
UIViewController.get_IsViewLoaded ()
ObservableItemsSource.NotLoadedYet ()
ObservableItemsSource.ReloadRequired ()
ObservableItemsSource.Remove (System.Collections.Specialized.NotifyCollectionChangedEventArgs args)
ObservableItemsSource.CollectionChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs args)
ObservableItemsSource.CollectionChanged (System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs args)
AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state)
NSAsyncSynchronizationContextDispatcher.Apply ()
(wrapper managed-to-native) UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr)
UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate)
UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName)
Application.Main (System.String[] args)

์ œ์•ˆ ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ฒŒ์‹œ ํ•œ ํ›„ App Center์— ๋‹ค์Œ ์˜ˆ์™ธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. System.IndexOutOfRangeException : IItemsViewSource๊ฐ€ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Xamarin.Forms.Platform.iOS
EmptySource.GetIndexForItem (System.Object item)
Xamarin.Forms.Platform.iOS
ItemsViewController`1[TItemsView].GetIndexForItem (System.Object item)
Xamarin.Forms.Platform.iOS
SelectableItemsViewController`1[TItemsView].SelectItem (System.Object selectedItem)
Xamarin.Forms.Platform.iOS
SelectableItemsViewController`1[TItemsView].UpdateNativeSelection ()
Xamarin.Forms.Platform.iOS
SelectableItemsViewRenderer`2[TItemsView,TViewController].UpdateNativeSelection ()
Xamarin.Forms.Platform.iOS
SelectableItemsViewRenderer`2[TItemsView,TViewController].UpdateItemsSource ()
Xamarin.Forms.Platform.iOS
ItemsViewRenderer`2[TItemsView,TViewController].OnElementPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs changedProperty)
Xamarin.Forms.Platform.iOS
StructuredItemsViewRenderer`2[TItemsView,TViewController].OnElementPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs changedProperty)
Xamarin.Forms.Platform.iOS
SelectableItemsViewRenderer`2[TItemsView,TViewController].OnElementPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs changedProperty)
Xamarin.Forms.Platform.iOS
GroupableItemsViewRenderer`2[TItemsView,TViewController].OnElementPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs changedProperty)
(wrapper delegate-invoke) <Module>.invoke_void_object_PropertyChangedEventArgs(object,System.ComponentModel.PropertyChangedEventArgs)
Xamarin.Forms
BindableObject.OnPropertyChanged (System.String propertyName)
Xamarin.Forms
Element.OnPropertyChanged (System.String propertyName)
Xamarin.Forms
BindableObject.SetValueActual (Xamarin.Forms.BindableProperty property, Xamarin.Forms.BindableObject+BindablePropertyContext context, System.Object value, System.Boolean currentlyApplying, Xamarin.Forms.Internals.SetValueFlags attributes, System.Boolean silent)
Xamarin.Forms
BindableObject.SetValueCore (Xamarin.Forms.BindableProperty property, System.Object value, Xamarin.Forms.Internals.SetValueFlags attributes, Xamarin.Forms.BindableObject+SetValuePrivateFlags privateAttributes)
Xamarin.Forms
BindableObject.SetValue (Xamarin.Forms.BindableProperty property, System.Object value, System.Boolean fromStyle, System.Boolean checkAccess)
Xamarin.Forms
ItemsView.set_ItemsSource (System.Collections.IEnumerable value)
FieldEdge.Mobile.iOS.CustomRenderers
CustomCollectionViewRenderer.Dispose (System.Boolean disposing)
Foundation
NSObject.Dispose ()
Xamarin.Forms.Platform.iOS
VisualElementPackager.Dispose (System.Boolean disposing)
Xamarin.Forms.Platform.iOS
VisualElementRenderer`1[TElement].Dispose (System.Boolean disposing)
Foundation
NSObject.Dispose ()
Xamarin.Forms.Platform.iOS
VisualElementPackager.Dispose (System.Boolean disposing)
Xamarin.Forms.Platform.iOS
VisualElementRenderer`1[TElement].Dispose (System.Boolean disposing)
Foundation
NSObject.Dispose ()
Xamarin.Forms.Platform.iOS
VisualElementPackager.Dispose (System.Boolean disposing)
Xamarin.Forms.Platform.iOS
VisualElementRenderer`1[TElement].Dispose (System.Boolean disposing)
Foundation
NSObject.Dispose ()
Xamarin.Forms.Platform.iOS
VisualElementPackager.Dispose (System.Boolean disposing)
Xamarin.Forms.Platform.iOS
VisualElementRenderer`1[TElement].Dispose (System.Boolean disposing)
Foundation
NSObject.Dispose ()
Xamarin.Forms.Platform.iOS
DisposeHelpers.DisposeModalAndChildRenderers (Xamarin.Forms.Element view)
Xamarin.Forms.Platform.iOS.Platform.Xamarin.Forms
INavigation.PopModalAsync (System.Boolean animated)
Xamarin.Forms
Application+NavigationImpl.OnPopModal (System.Boolean animated)
FieldEdge.Mobile.Shared.MVVMFramework
NavigationService+<>c__DisplayClass8_0.<CloseModal>b__0 ()

์ปฌ๋ ‰์…˜์—์„œ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด https://github.com/xamarin/Xamarin.Forms/issues/9632. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด ๋ชจ๋“  ๊ฒฝ์šฐ์— ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์•ˆํƒ€๊น๊ฒŒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฒŒ์‹œ ํ•œ ํ˜ธ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. CollectionView๊ฐ€์žˆ๋Š” ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๊ณ  ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜์—ฌ ์ˆ˜์ • ํ•œ ๋‹ค์Œ ํ™”๋ฉด์„ ๋‹ซ์œผ๋ฉด์ด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜์—ฌ CollectionView๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ™”๋ฉด์„ ์ข…๋ฃŒํ•˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์ง€๋งŒ CollectionView๋ฅผ ์ง€์šฐ๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ์˜์—ญ์„ ๋ฆฌํŒฉํ„ฐ๋งํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ํ™•์‹คํžˆ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ ๊ฐ€์žฅ ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์€ CollectionViews๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์‹œ๋‚˜๋ฆฌ์˜ค๋Š”

  • ์บ ๋Ÿฌ์…€๋ณด๊ธฐ ๋งŒ๋“ค๊ธฐ
  • carouselview ํ…œํ”Œ๋ฆฟ ๋‚ด์—์„œ collectionview ์‚ฌ์šฉ
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์บ ๋Ÿฌ์…€ ํ•ญ๋ชฉ ๋ฐ ์ปฌ๋ ‰์…˜ ํ•ญ๋ชฉ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฒŒ-cliecked
  • ์ผ๋ถ€ xaml ๋ถ€๋ถ„์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ํ•ซ ๋ฆฌ๋กœ๋“œ๋ฅผ ํ†ตํ•ด ๋ทฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
  • carouselview-collectionview ํ•ญ๋ชฉ์„ ๋‹ค์‹œ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค.

์ด ์‹œ์ ์—์„œ ๋‚ด ๊ฒฝํ—˜์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์˜ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ๋กœ ๋ฐฐํฌ ๋œ iPhone ์žฅ์น˜์—์„œ๋Š” ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์˜ค๋ฅ˜๋Š” ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ตœ์‹  Xamarin ํŒจํ‚ค์ง€์™€ ํ•จ๊ป˜ ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ˆ˜์ •ํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์ •ํ™•ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ •ํ™•ํžˆ ์ง€์  ํ•  ์ˆ˜์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ๋ชจ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์‹ ์†ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜์‹ญ์‹œ์˜ค.

@mduchev @ daves1992์˜ ๋Œ“๊ธ€์„ ๋ณด์…จ๋‚˜์š”?

https://github.com/xamarin/Xamarin.Forms/issues/8308#issuecomment -672028716

๋Œ“๊ธ€์˜ ํ™์ˆ˜ ์†์— ๋‹ค์†Œ ๋ฌปํ˜€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ ๋ฌผ์–ด๋ณด์„ธ์š”. ๋ฌธ์ œ๊ฐ€ ์žฌํ˜„๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@lafritay ๋ถˆํ–‰ํžˆ๋„, ์•„๋‹™๋‹ˆ๋‹ค. ๋ฌธ์ œ์—†์ด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ์žฅ์น˜ ๋ชจ๋‘์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ์‚ฌ์ด๋ฅผ ํƒ์ƒ‰ํ•ด๋„ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@lafritay ๋ถˆํ–‰ํžˆ๋„, ์•„๋‹™๋‹ˆ๋‹ค. ๋ฌธ์ œ์—†์ด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ์žฅ์น˜ ๋ชจ๋‘์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ์‚ฌ์ด๋ฅผ ํƒ์ƒ‰ํ•ด๋„ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๋ฒ„์ „์˜ IOS?

12.4.1์—์„œ ๋ณต์ œํ–ˆ์ง€๋งŒ ์ดํ›„ ๋ฒ„์ „์—์„œ๋Š” ๋ณต์ œ๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ตœ์‹  Xamarin ํŒจํ‚ค์ง€์™€ ํ•จ๊ป˜ ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ˆ˜์ •ํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์ •ํ™•ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ •ํ™•ํžˆ ์ง€์  ํ•  ์ˆ˜์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ๋ชจ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์‹ ์†ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜์‹ญ์‹œ์˜ค.

๋‹ค์‹œ ๋งŒ๋“ค๋ ค๋ฉด iOS 12์— ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@ rd09 ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค. iOS 13 ์žฅ์น˜์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ์œผ๋ฉฐ ์ด์ œ iOS 14 ์žฅ์น˜์—์„œ ๋‹ค์‹œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ๋Š” ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ์—ฌ์ „ํžˆ ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ์ง€์†๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ + ์†”๋ฃจ์…˜ : https://github.com/xamarin/Xamarin.Forms/issues/11853

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

@mduchev @ rd09 ๊ฐ„๋‹จํ•œ ์žฌํ˜„์„ ์–ป์„ ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Bugs.zip

์•ฑ์„๋กœ๋“œ ํ•œ ํ›„ ํ•ญ๋ชฉ์ด๋กœ๋“œ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

  1. ๋ฉ”๋‰ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ณด ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ•ญ๋ชฉ ํŽ˜์ด์ง€๋กœ ๋‹ค์‹œ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค (๋น„์–ด ์žˆ์–ด์•ผ ํ•จ).
  3. ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜๋ ค๋ฉด "pull to refresh"๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ํ•ญ๋ชฉ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒํ•˜๋Š” ํ•ต์‹ฌ์€ ItemsPage.xaml.cs์˜์ด ์ค„์ž…๋‹ˆ๋‹ค.

        protected override void OnDisappearing()
        {
            ItemsCollectionView.ItemsSource = null;
            base.OnDisappearing();
        }

๋ฌธ์ œ๋Š” CollectionView.ItemsSource ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋ฉด ์›๋ž˜ ๊ฐ’์ด ํฌํ•จ ๋œ ItemsViewSource ๊ฐ€ ์ ˆ๋Œ€๋กœ ์‚ญ์ œ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ CollectionChanged ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋ฐ˜์‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํŽ˜์ด์ง€์—์„œ ์ด๋™ ํ•œ ํ›„ ์ปฌ๋ ‰์…˜์ด ์—…๋ฐ์ดํŠธ๋˜๋ฉด (์˜ˆ : ๋Š๋ฆฐ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ๋กœ ์ธํ•ด) ์ž˜๋ชป๋œ ItemsViewSource ๋Š” ์‚ญ์ œ ๋œ ItemsViewController ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€์ด ํŒŒ์ผ์˜ UpdateItemsSource ๋ฉ”์„œ๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค : https://github.com/xamarin/Xamarin.Forms/blob/5.0.0/Xamarin.Forms.Platform.iOS/CollectionView/ItemsViewController.cs . ItemsSource ๊ฐ€ ๋ณด์œ ํ•œ ๊ฐ’์€ ๊ฐ์ฒด์˜ ์ˆ˜๋ช…์„ ์†Œ์œ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Android ๋Œ€์‘์ด ๊ฐ์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ์˜ํ•ด ํ™•์ธ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (์ด ํŒŒ์ผ์˜ UpdateItemsSource ์ฐธ์กฐ : https://github.com/xamarin/Xamarin.Forms/blob/79cc0f49fe90a59f02aa0490072b449ccdad4a27/Xamarin.Forms) .Platform.Android / CollectionView / ItemsViewAdapter.cs)

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ๊ณ„์†๋˜๋Š” ํฐ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด dispose๊ฐ€ ํ˜ธ์ถœ ๋  ๋•Œ ItemsSource์—์„œ null์„ ์‚ฌ์šฉํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@lafritay Im์€ ์งง์€ ํ…Œ์ŠคํŠธ์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š”์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ปฌ๋ ‰์…˜ ์†Œ์Šค๊ฐ€ ์˜ฌ๋ฐ”๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ํ๊ธฐ๋ฅผ ์™„์ „ํžˆ ์ˆ˜์ •ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๋‚ด๊ฐ€ ๊ฐ€์ง„ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

```
Example.Controls ์‚ฌ์šฉ;
Example.iOS.Renderers ์‚ฌ์šฉ;
Xamarin.Forms ์‚ฌ์šฉ;
Xamarin.Forms.Platform.iOS ์‚ฌ์šฉ;

[์–ด์…ˆ๋ธ”๋ฆฌ : ExportRenderer (typeof (ExtendedCollectionView), typeof (ExtendedCollectionViewRender))]
๋„ค์ž„ ์ŠคํŽ˜์ด์Šค Example.iOS.Renderers
{
๊ณต์šฉ ํด๋ž˜์Šค ExtendedCollectionViewRender : CollectionViewRenderer
{
๋ณดํ˜ธ ๋œ ์žฌ์ •์˜ GroupableItemsViewControllerCreateController (GroupableItemsView itemsView, ItemsViewLayout ๋ ˆ์ด์•„์›ƒ)
{
์ƒˆ๋กœ์šด CustomGroupableItemsViewController ๋ฐ˜ํ™˜(itemsView, ๋ ˆ์ด์•„์›ƒ);
}
}
}

Xamarin.Forms ์‚ฌ์šฉ;
Xamarin.Forms.Platform.iOS ์‚ฌ์šฉ;

๋„ค์ž„ ์ŠคํŽ˜์ด์Šค Example.iOS.Renderers
{
๊ณต์šฉ ํด๋ž˜์Šค CustomGroupableItemsViewController: GroupableItemsViewController
์—ฌ๊ธฐ์„œ TItemsView : GroupableItemsView
{
public CustomGroupableItemsViewController (TItemsView selectableItemsView, ItemsViewLayout layout) : base (selectableItemsView, layout)
{
}

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);
        ItemsSource = new EmptySource();
    }
}

}

์‹œ์Šคํ…œ ์‚ฌ์šฉ;
์žฌ๋‹จ ์‚ฌ์šฉ;
Xamarin.Forms.Platform.iOS ์‚ฌ์šฉ;

๋„ค์ž„ ์ŠคํŽ˜์ด์Šค Example.iOS.Renderers
{
๋‚ด๋ถ€ ํด๋ž˜์Šค EmptySource : IItemsViewSource
{
public int GroupCount => 0;

    public int ItemCount => 0;

    public bool Loop { get ; set; }

    public int LoopCount => 0;

    public object this[NSIndexPath indexPath] => throw new IndexOutOfRangeException("IItemsViewSource is empty");

    public int ItemCountInGroup(nint group) => 0;

    public object Group(NSIndexPath indexPath)
    {
        throw new IndexOutOfRangeException("IItemsViewSource is empty");
    }

    public NSIndexPath GetIndexForItem(object item)
    {
        throw new IndexOutOfRangeException("IItemsViewSource is empty");
    }

    public void Dispose()
    {
    }
}

}

@jormenjanssen ๋‹ค์Œ์€ ์ „์ฒด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

namespace myTIPreport.iOS
{
    /// <summary>
    /// Needed because of this bug: https://github.com/xamarin/xamarin.forms/issues/10842. And this bug:
    /// https://github.com/xamarin/Xamarin.Forms/issues/9691
    /// </summary>
    internal sealed class DefaultCollectionItemsViewController : GroupableItemsViewController<GroupableItemsView>
    {
        public DefaultCollectionItemsViewController(GroupableItemsView itemsView, ItemsViewLayout itemsLayout)
            : base(itemsView, itemsLayout)
        {
        }

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            // Needed because of this bug: https://github.com/xamarin/Xamarin.Forms/issues/9691
            CollectionView.ContentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.Automatic;
        }

        public override void UpdateItemsSource()
        {
            // Needed because of this bug: https://github.com/xamarin/Xamarin.Forms/issues/8308#issuecomment-710138958
            ItemsSource?.Dispose();
            base.UpdateItemsSource();
        }

        protected override UICollectionViewDelegateFlowLayout CreateDelegator() =>
            new DefaultCollectionItemsViewDelegator(ItemsViewLayout, this);
    }
}
using CoreGraphics;
using Foundation;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

namespace myTIPreport.iOS
{
    /// <summary>
    /// Only needed because of this bug: https://github.com/xamarin/xamarin.forms/issues/10842
    /// </summary>
    internal sealed class DefaultCollectionItemsViewDelegator : SelectableItemsViewDelegator<GroupableItemsView, DefaultCollectionItemsViewController>
    {
        public DefaultCollectionItemsViewDelegator(
            ItemsViewLayout itemsLayout,
            DefaultCollectionItemsViewController itemsController)
            : base(itemsLayout, itemsController)
        {
        }

        /// <summary>
        /// Per default this method returns the Estimated size when its not overriden. This method is called
        /// before the rendering process and sizes the cell correctly before it is displayed in the
        /// CollectionView. Calling the base implementation of this method will throw an exception when
        /// overriding the method.
        /// </summary>
        public override CGSize GetSizeForItem(
            UICollectionView collectionView,
            UICollectionViewLayout layout,
            NSIndexPath indexPath)
        {
            // CellForItem() is not reliable here because when the cell at indexPath is not visible it will
            // return null.
            UICollectionViewCell cell = collectionView.CellForItem(indexPath);
            if (cell is ItemsViewCell itemsViewCell)
            {
                // Get the real cell size.
                return itemsViewCell.Measure();
            }
            else
            {
                // This is basically a fallback when CellForItem() returns null.
                return ItemsViewLayout.EstimatedItemSize;
            }
        }
    }
}

using myTIPreport.iOS;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer(typeof(CollectionView), typeof(DefaultCollectionViewRenderer))]

namespace myTIPreport.iOS
{
    /// <summary>
    /// Reasons for this:
    /// 1. This bug: https://github.com/xamarin/xamarin.forms/issues/10842
    /// 2. This bug: https://github.com/xamarin/Xamarin.Forms/issues/8308
    /// </summary>
    internal class DefaultCollectionViewRenderer : GroupableItemsViewRenderer<GroupableItemsView, DefaultCollectionItemsViewController>
    {
        protected override DefaultCollectionItemsViewController CreateController(
            GroupableItemsView itemsView,
            ItemsViewLayout itemsLayout
        ) => new DefaultCollectionItemsViewController(itemsView, itemsLayout);

        protected override void Dispose(bool disposing)
        {
            // Workaround for this bug: https://github.com/xamarin/Xamarin.Forms/issues/8308
            ItemsView.SelectedItem = null;
            ItemsView.ItemsSource = null;

            base.Dispose(disposing);
        }
    }
}

์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. Collectionview ์šฉ ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ณ  Dispose ๋ฉ”์„œ๋“œ๋ฅผ ๋ฎ์–ด ์”๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
[์–ด์…ˆ๋ธ”๋ฆฌ : ExportRenderer (typeof (CollectionView), typeof (CustomCollectionViewRenderer))]
Project.iOS.Renderers ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค
{
๊ณต์šฉ ํด๋ž˜์Šค CustomCollectionViewRenderer : CollectionViewRenderer
{
๋ณดํ˜ธ ๋œ ์žฌ์ •์˜ void Dispose (bool disposing)
{
base.ItemsView.SelectedItem = null;
base.ItemsView.ItemsSource = null;
base.Dispose (์ฒ˜๋ถ„);
}
}
}

@ l0gaw iOS ํ”„๋กœ์ ํŠธ์—์„œ CustomRenderer ๋งŒ ๊ตฌํ˜„ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋ฉ”์ธ ํ”„๋กœ์ ํŠธ์—์„œ ๋‹ค๋ฅธ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‚ด ๊ฒฝ์šฐ์— ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. @ rd09๊ฐ€ ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋‚ด ๊ฒฝ์šฐ์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— "ItemsView.SelectedItem = null"์ค„๋„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ €์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์†”๋ฃจ์…˜์ด๋‚˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ... ์ด๊ฒƒ์€ ์Šคํƒ ์ถ”์ ์ž…๋‹ˆ๋‹ค ...
xamarin ์–‘์‹์—์„œ ์ตœ์‹  ์•ˆ์ • ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
AppShell ์‚ฌ์šฉ
iOS 12์—์„œ ๋ฐœ์ƒ
NSObject.get_SuperHandle ()
UICollectionViewController.get_CollectionView ()
ItemsViewController`1 [TItemsView] .GetPrototype ()
ItemsViewLayout.DetermineCellSize ()
ListViewLayout.ConstrainTo (CoreGraphics.CGSize ํฌ๊ธฐ)
ItemsViewLayout.UpdateConstraints (CoreGraphics.CGSize ํฌ๊ธฐ)
ItemsViewLayout.InvalidateLayout ()
(๋ž˜ํผ ๊ด€๋ฆฌ-๋„ค์ดํ‹ฐ๋ธŒ) UIKit.UIApplication.UIApplicationMain (int, string [], intptr, intptr)
UIApplication.Main (System.String [] args, System.IntPtr ๋ณด์•ˆ ์ฃผ์ฒด, System.IntPtr ๋Œ€๋ฆฌ์ž)
UIApplication.Main (System.String [] args, System.String principalClassName, System.String delegateClassName)
Application.Main (System.String [] ์ธ์ˆ˜)

BugExample.zip

@rmarinho ์ƒ˜ํ”Œ์„ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ณต์ œํ–ˆ์Šต๋‹ˆ๋‹ค.

Items ์†์„ฑ์„ ์„ค์ •ํ•˜๋Š” ๋ฐ 100ms ์ง€์—ฐ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„์ดํฐ 6
IOS 12.4.5
Xamarin.Forms 4.8

์ด ์žฌํ˜„์€ ๋” ์ด์ƒ 4.8.0.1364๋ถ€ํ„ฐ ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@mduchev @ rd09 ๊ฐ„๋‹จํ•œ ์žฌํ˜„์„ ์–ป์„ ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Bugs.zip

์ด ์žฌํ˜„์€ ๋” ์ด์ƒ 5.0.0-pre3์—์„œ ObjectDisposedException์„ throwํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ €์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์†”๋ฃจ์…˜์ด๋‚˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ... ์ด๊ฒƒ์€ ์Šคํƒ ์ถ”์ ์ž…๋‹ˆ๋‹ค ...
xamarin ์–‘์‹์—์„œ ์ตœ์‹  ์•ˆ์ • ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@ahmedroshdy Xamarin.Forms 4.8.0.1560์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๊ฒƒ์„๋ณด๊ณ  ๊ณ„์‹ญ๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰