I tested in playground in an init, and no crash:
class OrderTest {
struct Order {
var order: Int
}
var nextOrder: Int?
var allItems : [Order] = []
init() {
nextOrder = self.allItems.map{$0.order}.max()
print("nextOrder", nextOrder)
if nextOrder == nil {
nextOrder = 0
}
print("nextOrder after test", nextOrder)
nextOrder! += 1 // <--- Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
}
}
let orderTest = OrderTest()
So problem is somewhere else.
Could you show the class or structure where this init() is ?
One way I could get it crash was by delaying the allocation of next order with a Dispatch:
class OrderTest {
struct Order {
var order: Int
}
var nextOrder: Int?
var allItems : [Order] = []
init() {
nextOrder = self.allItems.map{$0.order}.max()
if nextOrder == nil {
DispatchQueue.main.async(execute: { // <<-- WITH THIS, IT CRASHES
self.nextOrder = 0
})
}
nextOrder! += 1 // <--- Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
}
}
Did you show the exact and complete init() ?
Post
Replies
Boosts
Views
Activity
It may be because you do it in the init.
I propose to add a return.
init() {
nextOrder = self.AllItems.map{$0.order}.max()
if nextOrder == nil {
nextOrder = 0
return // <<-- ADD THIS
}
nextOrder! += 1 // <--- Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
}
or add an else:
init() {
nextOrder = self.AllItems.map{$0.order}.max()
if nextOrder == nil {
nextOrder = 0
} else { // <<-- ADD THIS
nextOrder! += 1 // <--- Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
}
}
Here the steps to change from individual to company: https://help.uscreen.tv/en/articles/8284333-convert-apple-developer-account-from-individual-to-business
In case of problem, you can contact Support. They are really helpful.
Don't worry, no problem with your existing apps. Just needed to submit a new release.
You can do it even when certificates have expired. But you can do it now, before it expires.
I know at least 2 ways (I prefer the first):
First
go to Xcode > Settings > accounts
select your account and there ask for new certificates if you see they will obsolete soon.
that's it
Second
In Xcode project, select TARGETS
In signing and capabilities, you will see the certificate is obsolete.
Ask to sign again
Welcome to the forum
Could you post a screenshot ?
It would help to see the code on which error is reported…
And please tell about the context.
Is it a SwiftUI app ?
Is it a problem in Preview ?
Or is it when you try to run on simulator ?
You don't show enough code (eg, ContentView) to find out what is the problem.
Card is not ObservableObject. That may be the cause of the problem. Try to make it a class and ObservableObject.
2 more comments:
why don't you use environmentObject for deck, instead of all the bindings ?
in Xcode16, observable is much easier to use than ObservableObject. If needed, get details here: https://medium.com/@vladislavshkodich/remove-observableobject-from-your-swiftui-model-cb455e9572ef
I was looking for User definition. It is a Firebase class, should be this one: https://firebase.google.com/docs/reference/swift/firebaseauth/api/reference/Protocols/UserInfo.html
I suppose error is here:
let updatedUser = User(
coder: <#NSCoder#>,
id: userId,
name: name,
email: email,
phoneNumber: phoneNumber,
profilePictureURL: nil,
bio: bio
)
why do you include coder here ? And what does <#NSCoder#> mean ? Where did you get it ?
I understand you have several init for User:
either with coder
public required convenience init?(coder: NSCoder)
or direct declaration with all the properties.
So, you'd better study carefully FireBaseAuth documentation.
It is difficult to guess the overall structure of your code.
Is DotGenerator calling ContentView ?
Did you look at the solution I proposed ?
That's not a good way to ask a question, just formulating the error in the title.
Where do you get the error precisely in your code ? We cannot guess.
Welcome to the forum.
Please show the complete code.
How is User defined ?
It seems you forgot a closing parenthesis, isn't it ?
You don't show how the view uses the result. That should help.
I would do it with recursively calling iteration steps.
In the View, as an action for a button, call
simulation()
This function is defined as
func simulation() {
let numberOfStep = 100000 // any very large number
runSimulation(in: stopped.atStep..<numberOfStep)
}
The trick is that in runSimulation(), you call calls it recursively
func runSimulation<T: Sequence>(in sequence: T) where T.Element == Int {
// execute one step of the loop
runSimulation(in: sequence.dropFirst()) // call recursively
}
stopped is a state var
@State var stopped : (on: Bool, atStep: Int) = (on: false, atStep: 0)
atStep is the value (loop index) at which you may have stopped with another button action in the view, which let's you resume where you stopped if you want with a resume button.
Note that in your case, you could do it by chunks of 100 steps instead of individual steps, so the number of steps would be 1000 instead of 100000 for instance.
Much more detailed explanation here:
https://stackoverflow.com/questions/64202210/dispatchqueue-main-asyncafter-not-delaying
Hope that helps.
To report a bug, use the Feedback assistant.
That's not a question for developers forum, as it is not a question about your own development.
You'd better ask either on:
the game developer or its forums
Apple Support Community: https://discussions.apple.com/welcome
The UI part is essential. I remember in the old ages the Jazz spreadsheet on Mac was a complete mess, because it did not exploit the Mac UI capabilities. Where Excel did it excellently.
I understand it is for your personal use ? A full fledge spreadsheet is a huge endeavour. Beyond an individual capability (specially if you're a beginner on Mac development), unless you limit yourself very strictly (aka VisiCalc if you remember, plus some specific capabilities to handle functions you think of).
As for the language, I would suggest Swift.